2016-09-06 16 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をオーバーライドする必要があります。 その前に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 

Dockerfile

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

これを追加することによって、mysqlコマンドを実行するために管理してきました

mysqlサービスが起動していることを確認するために、20秒後にsql importを実行するように1行追加されています(もちろん、mysqlが起動した直後にコマンドを実行するよりエレガントな方法が必要です)。

+0

これは実際には役に立ちません。ビルド中ではなくコンテナを起動するときに問題が発生するためです。また、私は 'CMD'をベースイメージから守りたい。私は、MySQLデーモンを起動してコマンドを実行するスクリプトを '実行する 'ことが解決策であると考えています。 – user3170702

+0

あなたは正しいですが、私はtutum/lampの仕組みを正確には知らなかったので、動作させるまで少し遊んだことがあります。私は私の答えを編集しました。 –

関連する問題