2016-08-19 2 views
0

나는 mysql 컨테이너를 사용하고있다. 해당 컨테이너의 CMD 매개 변수는 mysqld입니다. 따라서 다음 매개 변수는 동일합니다.mysql 데몬을 실행중인`/ bin/bash -c '가있는 도커

docker run --name db -e MYSQL_ROOT_PASSWORD=proot --rm mysql 
docker run --name db -e MYSQL_ROOT_PASSWORD=proot --rm mysql mysqld 

이제 여러 명령을 사용하려고 할 때 문제가 발생합니다. 도커 컨테이너에서 여러 명령을 사용하려면 /bin/bash -c을 사용해야합니다. 난 단지 mysqld 명령을 사용하여 예시 :

docker run --name db -e MYSQL_ROOT_PASSWORD=proot --rm mysql /bin/bash -c "mysqld" 

이 명령은 나에게 다음과 같은 오류가 발생합니다.

mysqld: Table 'mysql.plugin' doesn't exist 

그런 다음 mysql deamon이 중지되고 이유를 알 수 없습니다.

데몬 (deamon)을 처음 시작한 다음 여러 명령을 사용하기 때문에 이라는 문법을 사용하고 싶습니다. /bin/bash -c 구문을 사용하고 싶습니다. 이 문제의 해결 방법으로 다른 컨테이너를 만들고 싶지 않습니다.

사이드 노트 : 문제 해결을 위해 --rm을 사용하고 있습니다. 그렇지 않으면 -d을 사용하여 컨테이너를 분리합니다.

답변

0

나는 answer from the github community이 있습니다. 그들은mysqld이 인수initdb경우 entyrypoint 스크립트는 않는다고 말했다. 따라서 해결 방법은 /docker-entrypoint-initdb.d/을 사용하여 .sh 또는 .sql 개의 파일을 넣은 다음 mysql이 이미 실행 된 후에 파일을 실행하는 것입니다.

따라서 최종 대답은 초기화 할 스크립트와 함께 -v /local/dir:/docker-entrypoint-initdb.d/ 디렉토리를 추가하는 것입니다. 예 :

docker run --name db -v $(pwd):/docker-entrypoint-initdb.d/ -e MYSQL_ROOT_PASSWORD=proot --rm mysql 
0

mysql Docker 이미지의 CMDmysqld이지만, ENTRYPOINT ["docker-entrypoint.sh"]은 bash 명령과 작동하지 않을 수 있습니다.

다른 프로세스를 실행하면 Docker 컨테이너의 모범 사례가 아닌이 이미지를 사용하는 것이 다소 어려울 수 있습니다. 디버거를 변경하기가 덜 어렵고 어렵 기 때문에 다른 컨테이너를 " 해결 방법 "- 당신이 시도하는 것은 그 대안입니다.

따라서 ENTRYPOINT을 덮어 쓰거나 사용자 정의 Dockerfile을 만들어야 할 수 있습니다.

관련 문제