Docker Startup Multiple服务无法正常工作

时间:2019-06-17 07:15:57

标签: docker

Dockerfile

FROM drupal

RUN apt-get update
RUN apt-get install openssh-server -y
RUN apt-get install -y supervisor

#SS Related Fix : https://github.com/Microsoft/WSL/issues/3621
RUN mkdir -p /run/sshd

# SS Access Configuration
RUN echo "root:Docker!" | chpasswd

#Project Uplaod
RUN rm -rf /var/www/html/*
COPY ./html/ /var/www/html/


# Startup Configuration
COPY servername.conf /etc/apache2/conf-enabled/servername.conf
ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf


CMD ["/usr/bin/supervisord"]

启动命令:docker -D运行-p 80:80 -p 2222:22 -it / bin / bash

[supervisord]
nodaemon=true

[program:SSH]
command=/usr/sbin/sshd start


[program:Apache]
command=/etc/init.d/apache2 start

当我跳入Shell并运行该命令时,它可以工作,但是当我启动容器时,它不会启动Web服务器。

2 个答案:

答案 0 :(得分:0)

站在documentation

  

要启动监管者,请运行$ BINDIR / supervisord。结果过程   将自己守护并与终端分离。它保持   操作日志默认为$ CWD / supervisor.log。

     

您可以通过以下方式在前台启动受监管的可执行文件   命令行上的-n标志。这对于调试启动很有用   问题。

因此systemd与主进程分离,这对终止该进程的docker意味着什么-退出容器。要解决您的问题,您需要将CMD部分更改为

CMD ["/usr/bin/supervisord", "-n"]

答案 1 :(得分:0)

跑步时

docker -D run -p 80:80 -p 2222:22 -it /bin/bash

命令的最后一部分/bin/bash替换了Dockerfile中的CMD,因此您仅 获得GNU bash shell。您应该删除该行的那一部分,然后图像中的标准命令将运行。

您可能会考虑在Docker环境中实际上需要多少交互式shell。大多数应用程序映像都设置为完全独立运行,而无需手动设置步骤。例如,比较股票mysqlnginx图像,其中不包括任何种类的远程登录系统。还请考虑,任何可以运行docker history的人现在都可以轻松地找到您的root密码,并且您无法管理sshd主机密钥。我建议删除整个监督/ sshd系统,然后打包您的应用程序。