无法ssh到docker容器centOS服务器

无法ssh到docker容器centOS服务器,docker,ssh,centos,Docker,Ssh,Centos,我是Docker的新手,我正在制作一个简单的centOS Docker映像,它可以运行ssh进程,也可以使用ssh密钥进行身份验证。 但是,当尝试运行ssh时username@hostname,我得到一个ssh:connect-to-host主机名端口22:Connection-densed 困惑的是,我试图通过键入ssh服务状态来查看ssh是否正在实际运行,但我得到了以下错误:系统没有以systemd作为init System(PID 1)启动。不能操作。无法连接到总线:主机已关闭 我试着用特

我是Docker的新手,我正在制作一个简单的centOS Docker映像,它可以运行ssh进程,也可以使用ssh密钥进行身份验证。 但是,当尝试运行
ssh时username@hostname
,我得到一个
ssh:connect-to-host主机名端口22:Connection-densed

困惑的是,我试图通过键入
ssh服务状态
来查看ssh是否正在实际运行,但我得到了以下错误:
系统没有以systemd作为init System(PID 1)启动。不能操作。无法连接到总线:主机已关闭

我试着用特权标志运行它,但没有任何效果。这是我的dockerfile:

FROM centos:latest

RUN yum update -y && yum -y install openssh openssh-server openssh-clients sudo initscripts

# Generate keys
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -q -N "" -t rsa -f /root/.ssh/id_rsa
RUN cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
EXPOSE 22
感谢您的帮助。谢谢大家!

编辑:在我的dockerfile末尾添加了
EXPOSE 22
。仍然不起作用

这也是我在docker ps时看到的。

还有我的telnet状态:


正如@masseyb所建议的,我将我拉取的docker映像更改为已经运行systemd的映像。之后一切都很顺利

您可能需要一个虚拟机来完成此任务。Docker容器通常只包装单个进程;它不像sshd那样运行系统守护进程,并且通常没有“用户”或“密码”。谢谢您的评论。但我的公司要求我能用Dockerfile中的DockerExpose端口22实现这一点你试过了吗?telnet工作正常吗?错误是因为映像没有运行
systemd
。如果这能帮上忙的话,我想这是存在的。你也可以试着重新调整你的照片
sshd
不需要作为守护程序运行(
mansshd
-D…sshd不会分离,也不会成为守护程序)。@masseyb lifesaver!非常感谢你!它起作用了!请注意,我不会
授权密钥
复制到映像中,而是在运行时绑定挂载
授权密钥
,原因是我永远不会在我的环境中使用您的映像,因为如果我(出于任何原因)省略了压碎密钥,那么我将为您提供访问权限,这不是我想要的生产服务器。如果你不想分享图片,只是说出来,这是一个没有意义的观点。
FROM centos/systemd:latest

RUN yum update -y && yum -y install openssh openssh-server openssh-clients sudo initscripts

# Generate keys
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -q -N "" -t rsa -f /root/.ssh/id_rsa
RUN cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
EXPOSE 22