首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Docker容器中运行sshd

在Docker容器中运行sshd
EN

Stack Overflow用户
提问于 2020-12-20 23:04:48
回答 1查看 609关注 0票数 2

我找到了这个Dockerfile样本here

代码语言:javascript
运行
复制
// version 1
FROM ubuntu:latest
RUN apt update && apt install ssh  -y
RUN service ssh start
CMD ["/usr/sbin/sshd","-D"]

当我构建并运行这个Dockerfile时,它在前台运行一个SSH服务器,这很棒。

但是,如果我使用以下Dockerfile

代码语言:javascript
运行
复制
// version 2
FROM ubuntu:latest
RUN apt update && apt install ssh -y
RUN service ssh start
# CMD ["/usr/sbin/sshd","-D"] // without this line

然后运行容器:

代码语言:javascript
运行
复制
~$ docker run -p 2222:22 -it ssh_server

并尝试从另一个终端连接到它,它不工作。看来,这种对sshd的调用是必要的。另一方面,如果我只是在Dockerfile中安装SSH:

代码语言:javascript
运行
复制
// version 3
FROM ubuntu:latest
RUN apt-get update && apt-get install -y ssh

然后像这样运行容器:

代码语言:javascript
运行
复制
~$ docker run -p 2222:22 -it ssh:test
~$ service ssh start
* Starting OpenBSD Secure Shell server sshd 

现在我可以连接到容器了。所以我想知道:如果版本1中的RUN ssh service start行是必需的,那么为什么版本3中不是必需的呢?

更令人困惑的是,如果我构建并运行版本4:

代码语言:javascript
运行
复制
// 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之间的关系是什么

EN

回答 1

Stack Overflow用户

发布于 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运行时,它可以工作!

谢谢大家!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65381311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档