繁体   English   中英

无法通过 SSH 连接到运行 Alpine Linux 3.10 的 Docker 容器

[英]Unable to SSH into Docker container running Alpine Linux 3.10

我在使用 SSH 连接到运行 Alpine Linux 3.10 的 Docker 容器(来自此图像)时遇到问题。

此连接必须使用 SSH,因为我使用的是备份软件barman ,它需要 SSH 连接到 Docker 容器内运行的 PostgreSQL 11 数据库。

首先我使用连接到docker容器

docker exec -it <container_name> /bin/bash

然后尝试重新安装并启动sshd

bash-5.0# apk add openssh --no-cache
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
OK: 117 MiB in 42 packages

bash-5.0# apk add openrc --no-cache
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
OK: 117 MiB in 42 packages

bash-5.0# rc-update add sshd
 * rc-update: sshd already installed in runlevel `sysinit'; skipping

bash-5.0# /etc/init.d/sshd start
 * WARNING: sshd is already starting

但是,我无法从 Docker 容器内部连接到本地sshd服务器

# ssh root@127.0.0.1
ssh: connect to host 127.0.0.1 port 22: Connection refused

同样,从 Ubuntu 主机通过 SSH 连接到 Docker 容器也会失败。

$ ssh postgres@172.26.0.4
ssh: connect to host 172.26.0.4 port 22: Connection refused

其中 172.26.0.4 是在 Docker 容器内运行ifconfig显示的 IP 地址。

任何想法我们如何解决这个问题?

我没有下载您所指的图像,而是使用默认的 docker alpine-image。 为了让 ssh 在容器内运行,需要一些额外的步骤——你很有可能需要采取同样的步骤:

ssh-keygen -A
rc-status
touch /run/openrc/softlevel
/etc/init.d/sshd start

如果您将 --net=host 与 docker run 命令一起使用,则可能与您的问题有关:

我们在 Ubuntu 容器中运行 SSH 服务器时遇到了类似的问题。 我们意识到容器主机上的 SSH 服务器正在运行,并且它使用了容器的 SSH 服务器想要使用的相同端口。

我们更改了 SSH 服务器使用的端口来解决这个问题。

请注意,我们的 Docker 容器使用了 --net=host,因此容器和主机具有相同的 IP 地址。 因此,2 个 SSH 服务器在单个端口上争吵,这不允许容器内的服务器正常启动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM