我在这里找到了这个Dockerfile
示例:
// version 1
FROM ubuntu:latest
RUN apt update && apt install ssh -y
RUN service ssh start
CMD ["/usr/sbin/sshd","-D"]
当我构建和运行这个 Dockerfile
时,它会在前台运行一个 SSH 服务器,这很好。
但如果我使用以下 Dockerfile
:
// version 2
FROM ubuntu:latest
RUN apt update && apt install ssh -y
RUN service ssh start
# CMD ["/usr/sbin/sshd","-D"] // without this line
然后运行容器:
~$ docker run -p 2222:22 -it ssh_server
同时,如果我只是在Dockerfile文件中安装SSH:
当尝试从另一个终端连接时,它将无法正常工作。看起来需要调用sshd。
// version 3
FROM ubuntu:latest
RUN apt-get update && apt-get install -y ssh
使用以下方式运行容器:
~$ docker run -p 2222:22 -it ssh:test
~$ service ssh start
* Starting OpenBSD Secure Shell server sshd
现在我可以连接到容器了。所以我想知道:如果版本1中的 RUN ssh service start
这一行是必需的,那么为什么版本3中不需要呢?
更加混乱的是,如果我构建并运行版本4:
// version 4
FROM ubuntu:latest
RUN apt update && apt install ssh -y
#RUN service ssh start // without this line
CMD ["/usr/sbin/sshd","-D"]
这也不起作用。
请有人解释一下这些行为吗?service ssh start
和/usr/sbin/sshd
之间的关系是什么?
docker exec
。 - John KugelmanRUN
命令实际上是一个完全的空操作。 - larsks