gpt4 book ai didi

mysql - 使用 Dockerfile 设置 MySQL

转载 作者:行者123 更新时间:2023-11-29 04:36:47 24 4
gpt4 key购买 nike

我刚刚开始使用 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):无法通过套接字“/var/run/mysqld/mysqld.sock”连接到本地 MySQL 服务器:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com