【问题标题】:Docker CentOS - mariadb (exit status 0; expected)Docker CentOS - mariadb(退出状态 0;预期)
【发布时间】:2018-05-01 02:35:20
【问题描述】:

我正在尝试创建 dockerfile 来为本地开发环境构建映像,但每次我让 docker 运行映像时,数据库服务器 (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

【问题讨论】:

  • 你能告诉我supervisord 配置文件吗?请记住,您需要在前台运行数据库
  • 感谢您的快速回复,我刚刚添加了 supervisord 配置文件。在 mariadb 命令中添加 -DFOREGROUND 并没有解决它。但是我对supervisord不是很熟悉......

标签: mysql docker mariadb


【解决方案1】:

我建议您找到调试 MariaDB 映像的好策略。

我的解决方案是在 Dockerfile 中设置一个临时 CMD

CMD ["sleep", "999999999999999"]

因此,您可以稍后在已启动的容器中启动 bash 或 sh,然后启动 MariaDB 启动二进制文件或 supervisord 命令。

但是,我强烈建议您编写一个将 MariaDB 与 PHP7 分开的堆栈,以追逐每个容器运行单个进程的场景(我知道,PHP 很烂)。 首先将 MariaDB 与 PHP 分开;)

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多