运行我的应用程序容器时自动启动和公开ssh的正确方法
我有带有python应用程序的容器,我需要它们在运行它们时自动启动并公开ssh。我知道,但是现在。我想知道在docker容器中自动运行附加服务的最佳方法 由于Docker只启动一个进程,安装运行我的应用程序容器时自动启动和公开ssh的正确方法,ssh,docker,Ssh,Docker,我有带有python应用程序的容器,我需要它们在运行它们时自动启动并公开ssh。我知道,但是现在。我想知道在docker容器中自动运行附加服务的最佳方法 由于Docker只启动一个进程,安装sshd是不够的。处理这一问题显然有多种选择: 使用流程管理器,如Monit或Supervisor 使用该选项 在/etc/bash.bashrc末尾追加一个命令(服务sshd start)(例如,请参阅) 在我看来,选择1似乎太过分了。另外,我想我必须用cmd运行容器来调用流程管理器,而不是bash或我的p
sshd
是不够的。处理这一问题显然有多种选择:
/etc/bash.bashrc
末尾追加一个命令(服务sshd start
)(例如,请参阅)/bin/bash
以外的另一个命令运行容器,它也不会工作
最好的解决方案是什么以及如何设置?您提到选项1似乎有些过分。为什么这样做太过分了?Supervisor的配置非常简单,基本上可以做您想做的事情 首先,编写启动python应用程序和sshd的管理器配置文件:
[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
[program:pythonapp]
command=/path/to/python myapp.py -x args etc etc
调用该文件supervisord.conf
,并将其提交到repo中的某个位置。在Dockerfile
中,将该文件作为容器构建步骤之一复制到容器中,公开SSH和应用程序的端口(如果需要),并将CMD设置为启动SupervisorORD:
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
EXPOSE 22 80
CMD ["/usr/bin/supervisord"]
这是干净和容易理解的。这就是我在需要时在一个容器中运行多个进程的方式。这甚至是一个很好的解决方案。如果您不想使用process manager,您可以将实际的容器命令封装在shell脚本中,然后使用sudo服务ssh start执行实际的命令 sudo服务ssh启动
python myapp.py-x args诸如此类
这将启动ssh作为守护进程,然后您的python应用程序将在之后启动。是的,我们可以为容器中的多进程配置Supervisord。如果您想使用Openssh服务器,我们可以如下所示配置管理器-:
[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
在supervisord.conf文件中
我们可以在docker映像中添加supervisord.conf文件,并在Dockerfile中更新一行
RUN apt update && apt install -y supervisor openssh-server
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
EXPOSE 22
CMD ["/usr/bin/supervisord"]
参考链接-:“过度杀伤力”仅仅是因为我认为我可以想出更简单的方法。但这显然是目前最流行的解决方案:谢谢您提供的详细信息!另外,您可以使用以下命令从容器外部停止python应用程序:
docker exec-i-t supervisorctl stop pythonapp',并且可以使用
start'启动它。如果应用程序以其他方式被终止,主管将重新启动它。您可以通过使用'kill'关闭python应用程序来测试这一点,并看到它会回来。