使用Dockerfile设置MySQL

我刚刚开始使用Docker,并能够根据我的需要设置MySQL,运行tutum / lamp并执行一堆exec 。 例如:

 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 

你需要重写run.sh才能做到这一点,因为当你运行一个容器时,它会首次安装mysql。 这就是为什么你不能连接到MySQL之前(在我以前的答案,我不知道这一点)。

我已经设法执行mysql命令,将其添加到Dockerfile

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

然后在同一个文件夹中创build一个文件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 

这个文件和/run.sh文件是一样的,只需要添加一行就可以在20秒后运行sql import来确保mysql服务已经启动并运行了(当然,在启动mysql之后,必须有更优雅的方式来运行命令) 。