我刚刚开始使用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发布于 2016-09-07 08:05:00
为了做到这一点,你需要覆盖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启动后运行命令还有更好的方式)。
https://stackoverflow.com/questions/39352623
复制相似问题