gpt4 book ai didi

linux - 在 Docker 容器中运行 sshd

转载 作者:行者123 更新时间:2023-12-04 08:23:36 25 4
gpt4 key购买 nike

我找到了这个 Dockerfile sample 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
现在我可以连接到容器了。所以我想知道:如果行 RUN ssh service start版本 1 是必要的,为什么版本 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 ?

最佳答案

好的,现在一切都清楚了:
基本上运行 /usr/sbin/sshd是运行 ssh 服务器的东西。它没有自行解决的原因(版本 4)是因为运行时运行的脚本 service ssh start - 这是脚本/etc/init.d/ssh - 创建目录 /run/sshd这是运行 sshd 所必需的。
此脚本还调用可执行文件 /usr/sbin/sshd ,但由于这是作为构建的一部分运行的,因此它不会超出构成图层的临时容器。宽
支撑的是/run/sshd目录!这就是为什么当我们运行 /usr/sbin/sshd 时作为 CMD 它有效!
谢谢大家!

关于linux - 在 Docker 容器中运行 sshd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65381311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com