首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Dockerfile设置MySQL

使用Dockerfile设置MySQL
EN

Stack Overflow用户
提问于 2016-09-06 23:21:06
回答 1查看 850关注 0票数 1

我刚刚开始使用Docker,并且能够根据我的需要,通过运行tutum/lamp并执行大量的exec来设置MySQL。例如:

代码语言:javascript
复制
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'中会产生以下结果

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-07 08:05:00

为了做到这一点,你需要覆盖run.sh,因为当你运行一个容器时,它会第一次安装mysql。这就是为什么在此之前你不能连接到mysql (在我之前的回答中,我没有意识到这一点)。

我已经设法通过将以下代码添加到Dockerfile来执行mysql命令

代码语言:javascript
复制
FROM tutum/lamp
ADD . /custom
RUN chmod 755 /custom/run.sh
CMD ["/custom/run.sh"]

然后在同一文件夹中创建文件run.sh

代码语言:javascript
复制
#!/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启动后运行命令还有更好的方式)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39352623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档