도커 파일에 mariaDB 베이스를 구축할 수 없습니다.
현재 차단되어 있으므로 Docker 파일을 빌드할 때 데이터베이스를 구축하고 싶습니다.그런데 오류가 났는데 왜 그랬는지 모르겠어요.도와주셔서 감사해요.
내 도커 파일
FROM mariadb:latest
WORKDIR /sql-files
ADD sql/ /sql-files/
ENV MYSQL_ROOT_PASSWORD test123
ENV MYSQL_DATABASE testDB
ENV MYSQL_USER toto
ENV MYSQL_PASSWORD test123
RUN apt-get update && apt-get -y install vim && chmod +x insertDB.sh && sh insertDB.sh
EXPOSE 3306
여기 insertDB.sh
#!/bin/sh
/usr/bin/mysqld_safe --skip-grant-tables &
sleep 5
mysql --user=$MYSQL_USER --password=$MYSQL_PASSWORD $MYSQL_DATABASE < test.sql
내 시험을 끝내야 해sql 스크립트
CREATE TABLE IF NOT EXISTS test (
id int NOT NULL AUTO_INCREMENT,
name varchar(32) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO test (name) VALUES
('Toto'),
('Jack'),
('Titi');
이 명령어를 사용하여 도커 파일을 실행하면docker build -t maria .
다음의 에러가 표시됩니다.
Processing triggers for libc-bin (2.19-18+deb8u10) ...
171112 18:12:53 mysqld_safe Logging to syslog.
171112 18:12:54 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
ERROR 1049 (42000): Unknown database 'testDB'
The command '/bin/sh -c apt-get update && apt-get -y install vim && chmod +x insertDB.sh && sh insertDB.sh' returned a non-zero code: 1
내가 뭘 놓쳤지?
dockerhub의 mariadb 이미지를 사용하면 시도했던 것보다 간단합니다.
"신규 인스턴스 초기화" 섹션 설명에 따라 다음 절차를 수행합니다.
컨테이너가 처음 시작되면 지정된 이름의 새 데이터베이스가 생성되고 제공된 구성 변수를 사용하여 초기화됩니다.또한 /docker-entrypoint-initdb.d에 있는 확장자 .sh, .sql 및 .sql.gz 파일을 실행합니다.파일은 알파벳 순으로 실행됩니다.
그러니까 이 정도면 충분해test.sql
대본을 쓰다/docker-entrypoint-initdb.d
그런 다음 Docker file을 mysqld 명령으로 실행해야 합니다.
그래서 나는 그냥 떠날 것이다.test.sql
로컬에서sql
서브디렉토리를 사용하면Dockerfile
:
FROM mariadb:latest
ADD sql/ /docker-entrypoint-initdb.d
ENV MYSQL_ROOT_PASSWORD test123
ENV MYSQL_DATABASE testDB
ENV MYSQL_USER toto
ENV MYSQL_PASSWORD test123
RUN apt-get update && apt-get -y install vim
EXPOSE 3306
CMD ["mysqld"]
이미지를 구축하다
docker build -t maria .
컨테이너를 실행합니다(포트 맵에 도움이 될 수 있습니다).
docker run --name mariadb -ti -d -p 3306:3306 maria
작성하다testDB
및 사용자toto
Dockerfiles의 환경변수를 사용하여 올바르게 정의한 바와 같이 다음과 같이 덮어쓸 수 있습니다.-e
의 파라미터docker run
).
다음 두 가지를 놓치고 있습니다.
- 다음 방법으로 데이터베이스를 작성해야 합니다.
CREATE DATABASE testDB
명령어를 입력합니다. - 사용자를 생성해야 합니다.
CREATE USER 'toto'
명령어를 입력합니다.
뛰기 전에 이걸 해야 해test.sql
대본.사용 중인 도커 이미지가 완전히 비어 있습니다. 도커 이미지는 사용하려는 데이터베이스 또는 사용자를 인식하지 못합니다.
위의 단계를 수행해도permission denied
, 또한 다음 명령어를 포함해야 합니다.GRANT
을 나타내는 성명toto
데이터베이스에 대한 필요한 권한testDB
자세한 내용은 MariaDB 문서를 참조하십시오.
언급URL : https://stackoverflow.com/questions/47252273/unable-to-build-a-mariadb-base-in-a-dockerfile
'programing' 카테고리의 다른 글
어레이가 비어 있는지 없는지 확인하는 방법 (0) | 2022.09.17 |
---|---|
serialVersion이란UID와 그것을 사용해야 하는 이유는 무엇입니까? (0) | 2022.09.17 |
PHP에서 JavaScript로 JSON을 반환하시겠습니까? (0) | 2022.09.17 |
Python으로 이메일 보내는 방법 (0) | 2022.09.17 |
매우 큰 SQL 파일(MySQL)을 Import할 때 단일 커밋 (0) | 2022.09.17 |