我找到了这个Dockerfile
样本here
// 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
并尝试从另一个终端连接到它,它不工作。看来,这种对sshd的调用是必要的。另一方面,如果我只是在Dockerfile中安装SSH:
// 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
之间的关系是什么
发布于 2020-12-21 01:30:30
好了,现在一切都清楚了:
基本上,运行/usr/sbin/sshd
就是运行ssh服务器。它不能独立运行(版本4)的原因是,当您运行service ssh start
时运行的脚本--脚本/etc/init.d/ssh
--创建了一个运行sshd所需的目录/run/sshd
。
该脚本还调用了可执行文件/usr/sbin/sshd
,但由于它是作为构建的一部分运行的,所以除了构成层的临时容器之外,它不能支持。W
所支持的是/run/sshd
目录!这就是为什么当我们将/usr/sbin/sshd
作为CMD运行时,它可以工作!
谢谢大家!
https://stackoverflow.com/questions/65381311
复制相似问题