无法在正在运行的Docker容器中ssh localhost

问题描述 投票:15回答:3

我正在为需要ssh到localhost的应用程序构建一个Docker镜像(即ssh user @ localhost)

我正在使用Ubuntu桌面计算机并开始使用基本的ubuntu:16.04容器。以下是我的Dockerfile的内容:

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y \
        openjdk-8-jdk \
        ssh && \
        groupadd -r custom_group && useradd -r -g custom_group -m user1

USER user1

RUN ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N "" && \
        cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

然后我使用以下命令构建此容器:

docker build -t test-container .

并运行它:

docker run -it test-container

容器打开时出现以下提示,并正确生成密钥以启用ssh到localhost:

user1@0531c0f71e0a:/$ 
user1@0531c0f71e0a:/$ cd ~/.ssh/
user1@0531c0f71e0a:~/.ssh$ ls
authorized_keys  id_rsa  id_rsa.pub

然后ssh进入localhost并受到错误的欢迎:

user1@0531c0f71e0a:~$ ssh user1@localhost
ssh: connect to host localhost port 22: Cannot assign requested address

有什么我做错了或需要配置的任何其他网络设置?我只想在运行容器中ssh到localhost。

linux docker ssh localhost containers
3个回答
12
投票

首先,您需要在映像构建脚本中安装ssh服务器:

  • RUN sudo apt-get install -y openssh-server

然后你需要启动ssh服务器:

  • RUN sudo /etc/init.d/ssh start

或者甚至可能在Dockerfile的最后几行(你必须实例化一个二进制文件以保持容器运行......)

 USER root
 CMD [ "sh", "/etc/init.d/ssh", "start"]

在主机上比

# init a container from an the image
run -d --name my-ssh-container-name-01 \
    -v /opt/local/dir:/opt/container/dir my-image-01


3
投票

正如@ user2915097在OP注释中所述,这是由于容器中的ssh实例尝试使用IPv6连接到主机。使用-4强制通过IPv4连接解决了这个问题。

$ docker run -it ubuntu ssh -4 user@hostname

0
投票

对于Docker Compose,我能够将以下内容添加到我的.yml文件中:

network_mode: "host"

我相信Docker中的等价物是:

--net=host

© www.soinside.com 2019 - 2024. All rights reserved.