【发布时间】:2014-07-28 05:35:18
【问题描述】:
这些天我正在学习 docker。我想在 docker 容器中安装 mysql。
这是我的 Dockerfile
FROM ubuntu:14.04
ADD ./setup_mysql.sh /setup_mysql.sh
RUN chmod 755 /setup_mysql.sh
RUN /setup_mysql.sh
EXPOSE 3306
CMD ["/usr/sbin/mysqld"]
和shell脚本setup_mysql.sh
apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server
sed -i -e "s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
service mysql start &
sleep 5
echo "UPDATE mysql.user SET password=PASSWORD('rootpass') WHERE user='root'" | mysql
echo "CREATE DATABASE devdb" | mysql
echo "GRANT ALL ON devdb.* TO devuser @'%' IDENTIFIED BY 'devpass'" | mysql
sleep 5
service mysql stop
运行sudo docker build -t test/devenv .时发生错误
Setting up mysql-server-5.5 (5.5.38-0ubuntu0.14.04.1) ...
invoke-rc.d: policy-rc.d denied execution of stop.
invoke-rc.d: policy-rc.d denied execution of start.
如果我删除第二个sleep 5,命令service mysql stop 将抛出
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
为什么会这样?
谢谢!
【问题讨论】:
-
在容器启动过程中安装 mysql 是不好的。国际海事组织。将安装放在 DOCKERFILE 中。
-
在官方 Debian 镜像中
/usr/sbin/policy-rc.d有一条评论解释了这种行为。解决方法是simple,但this answer 可以更好地解释问题和解决方案。 -
谢谢!抱歉迟到了