我刚刚开始使用Docker,并且能够通过运行tutum / lamp并执行一堆exec
来根据我的需要设置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
最佳答案
为此,您将需要覆盖run.sh,因为在运行容器时,它将首次安装mysql。
这就是为什么您不能在此之前连接到mysql的原因(在我以前的回答中我没有意识到)。
我已经设法通过将它添加到Dockerfile中来执行mysql命令
FROM tutum/lamp
ADD . /custom
RUN chmod 755 /custom/run.sh
CMD ["/custom/run.sh"]
然后在同一个文件夹中创建一个文件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启动后,必须有一种更为优雅的方式来运行命令) 。
关于mysql - 使用Dockerfile设置MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39352623/