programing

도커 파일에 mariaDB 베이스를 구축할 수 없습니다.

newsource 2022. 9. 17. 10:44

도커 파일에 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및 사용자totoDockerfiles의 환경변수를 사용하여 올바르게 정의한 바와 같이 다음과 같이 덮어쓸 수 있습니다.-e의 파라미터docker run).

다음 두 가지를 놓치고 있습니다.

  1. 다음 방법으로 데이터베이스를 작성해야 합니다.CREATE DATABASE testDB명령어를 입력합니다.
  2. 사용자를 생성해야 합니다.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