运行 /usr/sbin/sshd 在 Dockerfile 中不起作用

run /usr/sbin/sshd in a Dockerfile does not work

在 Dockerfile 中我想启动 ssh 守护进程,然后给出 bash:

from fedora
run yum -y install openssh-server openssh-clients openssh
run yum clean all
run echo "PermitRootLogin yes">>/etc/ssh/sshd_config
run ssh-keygen -A
run ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
run cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
run /usr/sbin/sshd
expose 22
cmd /usr/bin/bash

我创建了镜像并从中启动了一个容器,

$ sudo docker build -t test/openssh .

$ sudo docker run -it --rm  -P test/openssh

但在容器中我看到 sshd 不是 运行。为什么不呢?

Dockerfile 中的 RUN 命令是您用来设置、安装 and/or 配置容器内软件的 bash 命令。此命令将在 docker 映像构建期间 运行(并将结束),并且任何本应启动守护进程的 RUN 命令都将不起作用。它们是启动容器时 运行 容器内各种进程的一些模式。最常见的一种是使用 supervisord(在此官方文档中,您可以看到一个将它用于 运行 ssh 守护程序的示例)。