2016-09-06 4 views
1

나는 Docker를 시작하면서 tutum/lamp를 실행하고 exec을 사용하여 MySQL을 필요에 따라 설정할 수있었습니다. 예 :Dockerfile을 사용하여 MySQL 설정하기

docker run -d -p 80:80 -p 3306:3306 --name test tutum/lamp 
... 
docker exec test mysqldump --host somehost --user someuser --password --databases somedatabase > dump.sql 
docker exec test mysql -u root < dump.sql 

그러나이 문제를 Dockerfile로 변환하는 데 문제가 있습니다. 특히, ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'에서 다음과 같은 결과 :

FROM tutum/lamp 
EXPOSE 80 3306 
... 
RUN mysqldump --host=$DB_IP --user=$DB_USER --password=$DB_PASSWORD --databases somedatabase > dump.sql 
RUN mysql -u root < dump.sql 

답변

4

당신은 컨테이너를 실행할 때 처음으로 MySQL을 설치하기 때문에, 그렇게하기 위해 run.sh 오버라이드 (override) 할 필요가 있습니다. 그 이유는 이전에 mysql에 연결할 수 없기 때문입니다 (이전의 대답에서는 그 사실을 알지 못했습니다).

나는/실행과 동일 그런 다음 같은 폴더에 파일 run.sh

#!/bin/bash 

VOLUME_HOME="/var/lib/mysql" 

sed -ri -e "s/^upload_max_filesize.*/upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}/" \ 
-e "s/^post_max_size.*/post_max_size = ${PHP_POST_MAX_SIZE}/" /etc/php5/apache2/php.ini 
if [[ ! -d $VOLUME_HOME/mysql ]]; then 
    echo "=> An empty or uninitialized MySQL volume is detected in $VOLUME_HOME" 
    echo "=> Installing MySQL ..." 
    mysql_install_db > /dev/null 2>&1 
    echo "=> Done!" 
    /create_mysql_admin_user.sh 
else 
    echo "=> Using an existing volume of MySQL" 
fi 

(sleep 20 ; mysql -u root < /custom/dump.sql ; echo "*** IMPORT ***" ) & 

exec supervisord -n 

이 파일을 만들

FROM tutum/lamp 
ADD . /custom 
RUN chmod 755 /custom/run.sh 
CMD ["/custom/run.sh"] 

을 Dockerfile이를 추가하여 MySQL의 명령을 실행하기 위해 관리했습니다 mysql 서비스가 시작되어 실행되고 있는지 확인하기 위해 20 초 후에 sql import를 실행하기 위해 추가 된 한 줄의 .sh (mysql이 시작된 직후에 명령을 실행하는보다 우아한 방법이 있어야합니다).

+0

현재 도움이되지 않습니다. 빌드하는 동안 대신 컨테이너를 시작할 때 문제가 발생하기 때문입니다. 또한 기본 이미지에서 'CMD'를 유지하려고합니다. 나는 해결책이 MySQL 데몬을 시작한 스크립트를'실행 '하고 나서 명령을 실행할 것이라고 생각한다. – user3170702

+0

네 말이 맞아, 투투탄/램프가 어떻게 작동하는지 정확히 알지 못해서 일하기 전까지 약간 놀았 어. 내 대답을 편집했습니다. –

관련 문제