2

我有一个奇怪的问题。

我无法通过 ssh 连接到具有 ip 地址的 docker 容器172.17.0.61

我收到以下错误:

$ ssh 172.17.0.61
ssh: connect to host 172.17.0.61 port 22: Connection refused

我的Dockerfile确实包含openssh-server安装步骤:

RUN apt-get -y install curl runit openssh-server

并且还可以启动 ssh:

RUN service ssh start

可能是什么问题?

当我使用进入容器nsenter并启动ssh服务时,我就可以 ssh 了。但是在创建容器时ssh-server似乎没有开始。

我应该怎么办?

4

3 回答 3

10

在构建 Dockerfile 时,您将创建一个映像。但是您不能使用已经运行的 ssh 守护程序或任何其他正在运行的服务来创建映像。首先,如果您从镜像中创建一个正在运行的容器,您可以在其中启动服务。例如,通过将启动指令附加到 docker run 命令:

sudo docker run -d mysshserver service ssh start

您可以使用CMD为您的 docker 映像定义默认命令。这是一个示例 Dockerfile:

FROM ubuntu:14.04.1
MAINTAINER Thomas Steinbach
EXPOSE 22
RUN apt-get install -y openssh-server
CMD service ssh start && while true; do sleep 3000; done

您可以使用以下两个命令构建运行此映像:

sudo docker build -t sshtest .
sudo docker run -d -P --name ssht sshtest

现在您可以通过 ssh 连接到该容器。请注意,在示例 Dockerfile 中,没有创建用户,也没有创建登录。此图像仅作为示例,您可以启动到它的 ssh 连接,但不能登录。

于 2015-01-09T14:59:20.013 回答
0

我有同样的问题。幸运的是,我可以通过检查 kenorb 答案并将其调整到我的 Dockerfile 来解决它: https ://stackoverflow.com/a/61738823/4058295

值得一试 :)

于 2021-04-21T13:11:34.063 回答
0

在我看来,有一个更好的方法:

Dockerfile

FROM ubuntu:14.04.1
EXPOSE 22
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
RUN apt-get install -y openssh-server

ENTRYPOINT ["sh", "/docker-entrypoint.sh"]

# THIS PART WILL BE REPLACED IF YOU PASS SOME OTHER COMMAND TO docker RUN
CMD while true; do echo "default arg" && sleep 1; done

码头入口点.sh

#!/bin/bash
service ssh restart
exec "$@"

构建命令 docker build -t sshtest .

这种方法的好处是您的 ssh 守护程序将始终在您使用时启动docker run,但您也可以指定可选参数,例如:

docker run sshtest每 1 秒打印一次default arg是否每 3 秒docker run sshtest sh -c 'while true; do echo "passed arg" && sleep 3; done'打印一次passed arg

于 2020-06-08T10:00:29.353 回答