我尝试使用Docker创建一个mysql图像,但它无法正常工作......
我的目标是从Ubuntu Trusty创建MYSQL的自定义映像。图像应该执行典型的脚本来根据通过命令行传递的变量配置数据库但是当我运行' docker run -d -e MYSQL_ROOT = docker -e MYSQL_DATABASE = wp ...&#39 ; 脚本正常工作,但完成后,容器停止。
我试过了#nohup / usr / sbin / mysqld&' ,exec' / usr / sbin / mysqld&'但没什么,守护进程死了。
我的dockerfile如下:
FROM ubuntu:trusty
ENV DEBIAN_FRONTEND noninteractive
RUN \
apt-get update && \
apt-get -y install mysql-server-5.6 supervisor --no-install-recommends && \
apt-get -y clean && \
apt-get -y autoclean && \
rm -rf /var/lib/apt/lists/*
RUN \
ln -sf /dev/stderr /var/log/mysql/error.log && \
sed -i 's/127.0.0.1/0.0.0.0/' /etc/mysql/my.cnf
COPY config.sh /
VOLUME ["/var/lib/mysql"]
EXPOSE 3306
ENTRYPOINT ["/config.sh"]
脚本' config.sh' :
#!/bin/bash -x
/usr/sbin/mysqld &
sleep 5
if [ $MYSQL_ROOT_PASSWORD ]
then
mysql -u root -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQL_ROOT_PASSWORD}') ;"
else
echo 'Error al establecer la contraseña de root.'
exit 1
fi
if [ $MYSQL_DATABASE ]
then
mysql -u root -p${MYSQL_ROOT_PASSWORD} -e "CREATE DATABASE IF NOT EXISTS ${MYSQL_DATABASE} ;"
else
echo 'Error al crear la base de datos.'
fi
if [ $MYSQL_USER ] && [ $MYSQL_PASSWORD ]
then
mysql -u root -p${MYSQL_ROOT_PASSWORD} -e "GRANT ALL ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PASSWORD}' ; FLUSH PRIVILEGES ;"
elif [ $MYSQL_USER ]
then
mysql -u root -p${MYSQL_ROOT_PASSWORD} -e "GRANT ALL ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_USER}' ; FLUSH PRIVILEGES ;"
else
echo 'No se pudo crear el usuario.'
fi
答案 0 :(得分:0)
这很可能是因为您执行命令的顺序。 你需要前台的mysqld守护进程,并将它放在后台。
只需添加一些在脚本结尾处永远等待的内容:
#!/bin/bash -x
## YOUR INIT CODE HERE
## ...
## ...
tail -f /dev/null