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服务器。
答案 0 :(得分:0)
要启动监管者,请运行$ 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。大多数应用程序映像都设置为完全独立运行,而无需手动设置步骤。例如,比较股票mysql
或nginx
图像,其中不包括任何种类的远程登录系统。还请考虑,任何可以运行docker history
的人现在都可以轻松地找到您的root密码,并且您无法管理sshd主机密钥。我建议删除整个监督/ sshd系统,然后打包您的应用程序。