我尝试创建docker镜像时出现问题

时间:2017-05-01 09:55:26

标签: mysql database bash docker containers

我尝试使用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

1 个答案:

答案 0 :(得分:0)

这很可能是因为您执行命令的顺序。 你需要前台的mysqld守护进程,并将它放在后台。

只需添加一些在脚本结尾处永远等待的内容:

#!/bin/bash -x

## YOUR INIT CODE HERE
## ...
## ...

tail -f /dev/null