首页 > 解决方案 > 无法通过 SSH 连接到运行 Alpine Linux 3.10 的 Docker 容器

问题描述

我在使用 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

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

# 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 是在ifconfigDocker 容器内运行时显示的 IP 地址。

有什么想法可以解决这个问题吗?

标签: linuxdockersshopensshalpine

解决方案


我没有下载您所指的图像,但使用默认的 docker alpine-image 工作。要让 ssh 在容器内运行,需要执行一些额外的步骤 - 您很有可能需要采取相同的步骤:

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

推荐阅读