我刚刚开始使用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/

10-16 23:59