正确的方法来运行我的应用程序容器时自动启动和公开ssh
我有容器与python应用程序,我需要他们自动启动和暴露ssh运行时。 我知道这是对付Docker的最佳做法 ,但现在我没有任何其他解决scheme 。 我很想知道在Docker容器中自动运行一个附加服务的最佳方法。
由于Docker只会启动一个进程,安装sshd
是不够的。 显然有多种select来处理它:
- 使用像Monit或Supervisor这样的进程pipe理器
- 使用
ENTRYPOINT
选项 - 在
/etc/bash.bashrc
末尾添加一个命令(例如service sshd start
)(请参阅此答案 )
选项1似乎对我来说过分了。 另外我想我将不得不运行一个cmd调用进程pipe理器而不是bash或我的python应用程序的容器:不完全是我想要的。
我不知道如何使用选项2这种情况。 我应该写一个自定义脚本启动sshd,然后运行提供的命令,如果有的话? 这个脚本应该怎么样?
选项3非常简单,但很脏。 另外,如果我用另一个命令而不是/bin/bash
运行容器,它将不起作用。
什么是最好的解决scheme,以及如何设置它?
你提到的选项1似乎是矫枉过正。 为什么它是矫枉过正? 主pipe是非常简单的configuration,并将基本上做你想要的。
首先,编写启动你的python应用程序和sshd的主pipeconfiguration文件:
[supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D [program:pythonapp] command=/path/to/python myapp.py -x args etc etc
调用supervisord.conf
文件并将其提交到您的仓库中。 在您的Dockerfile
,将该文件作为容器构build步骤之一复制到容器中,公开SSH和您的应用程序的端口(如果需要),并将CMD设置为启动supervisord:
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf EXPOSE 22 80 CMD ["/usr/bin/supervisord"]
这是干净和容易理解的。 这是我如何在需要时在容器中运行多个进程。 甚至在Docker文档中提出这是一个很好的解决scheme。
如果你不想使用进程pipe理器,你可以将你的实际容器命令包装在一个shell脚本中,然后执行sudo service ssh start,然后执行你的实际命令。
sudo服务ssh启动
pythonmyapp.py -x参数等等等等
这将启动ssh作为一个守护进程,然后你的python应用程序将启动后。
是的,我们可以在一个容器中为多进程configurationSupervisord。 如果你想使用Openssh-server,我们可以像下面这样configurationSupervisor:
[supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D
在supervisord.conf文件中。
我们可以在docker image中添加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"]
参考链接: Gotechnies