我正在尝试创建dockerfile来为本地开发环境构建映像,但每次让docker运行映像时,DB服务器(mariadb / mysql)都会以状态0退出。
2017-11-17 08:36:10,854 CRIT Supervisor running as root (no user in config file)
2017-11-17 08:36:10,864 INFO RPC interface 'supervisor' initialized
2017-11-17 08:36:10,865 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2017-11-17 08:36:10,865 INFO supervisord started with pid 1
2017-11-17 08:36:11,873 INFO spawned: 'httpd' with pid 9
2017-11-17 08:36:11,876 INFO spawned: 'mariadb' with pid 10
2017-11-17 08:36:12,973 INFO success: httpd entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2017-11-17 08:36:12,974 INFO success: mariadb entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
**2017-11-17 08:36:13,327 INFO exited: mariadb (exit status 0; expected)**
无论我使用哪种类型的数据库服务器(MariaDB / MySQL),我都会尝试添加到dockerfile中,然后退出。
Dockerfile
FROM centos:centos7
# Install tools
RUN yum -y install curl wget unzip git vim python-setuptools yum-utils which epel-release
# Install Python and Supervisor
RUN yum -y install python-setuptools \ && mkdir -p /var/log/supervisor \ && easy_install supervisor
# Install Apache
RUN yum -y install httpd
# Install Remi Updated PHP 7
RUN wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm \ && rpm -Uvh remi-release-7.rpm \ && yum-config-manager --enable remi-php70 \ && yum -y install php php-devel php-gd php-pdo php-soap php-xmlrpc php-xml
# Reconfigure Apache
RUN sed -i 's/AllowOverride None/AllowOverride All/g' /etc/httpd/conf/httpd.conf \ && chown root:apache /var/www/html \ && chmod g+s /var/www/html
# Install MariaDB
RUN yum -y install mariadb-server
COPY supervisord.conf /etc/supervisord.conf
EXPOSE 80 3306
CMD ["/usr/bin/supervisord"]
supervisord.conf
[unix_http_server]
file=/tmp/supervisor.sock
[supervisord] nodaemon=true
[program:mariadb] command=/usr/bin/mysqld_safe
[program:httpd] command=/usr/sbin/httpd -DFOREGROUND
[group:allservices] programs=mariadb,httpd
[rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl] serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
答案 0 :(得分:0)
我建议您找一个调试MariaDB图像的好策略。
我的解决方案是使用
在Dockerfile中设置临时CMDCMD ["sleep", "999999999999999"]
因此,您可以稍后在已启动的容器中启动bash或sh并启动MariaDB启动二进制文件或您的supervisord命令。
但是,我认真地建议你编写一个将MariaDB与PHP7分开的堆栈,追逐每个容器运行一个进程的场景(我知道,PHP很糟糕)。 首先将MariaDB与PHP分开;)