在使用 Docker 构建应用程序时,有时需要访问正在运行的容器。其中一种方式是通过 ssh 连接到容器中。在本文中,我们将探讨如何在 Docker 容器中开启 SSH 访问,并介绍具体实现步骤。
安装 SSH 服务器
首先,安装 SSH 服务器在容器中。可以执行以下命令:
apt update apt install -y openssh-server
创建 SSH 用户
创建一个新的用户,以便用于 SSH 连接。可以使用以下命令来创建新用户:
useradd -m <username>
设置新用户的密码:
passwd <username>
修改 SSH 配置文件
修改 SSH 配置文件,以便允许远程连接。打开 /etc/ssh/sshd_config
文件,并修改以下两个选项:
PermitRootLogin yes PasswordAuthentication yes
这允许 root 用户远程连接,并且使用密码进行验证。
重启 SSH 服务使配置生效:
service ssh restart
在容器启动时自动启动 SSH 服务
现在我们已经安装和配置了 SSH 服务器,下一步是确保每次容器启动时,SSH 服务都能自动启动。有两种方法可以实现这一目标。
方法一:编写脚本并将其添加到 Dockerfile 中
为了在容器启动时启动 SSH 服务,可以编写一个脚本并添加到容器的 Dockerfile 文件中。示例如下:
-- -------------------- ---- ------- ---- ------------- --- ------- ------ -- - ------- ------- -- -------------- -- - ----- ------------- --- -------- --------- --- ----- -- --------- --- -------------
在 /start.sh
脚本中添加以下行:
#!/bin/sh service ssh start
方法二:使用 systemd
另外一种方法是使用 systemd 管理 SSH 服务,并且在容器启动时自动启用它。
需要在 Dockerfile 文件中放置以下内容:
FROM ubuntu:latest RUN apt-get update && \ apt-get install -y systemd openssh-server && \ systemctl enable ssh CMD ["/sbin/init"]
注意:在这个 Dockerfile 中,我们使用 /sbin/init
启动系统,而不是普通命令(例如 CMD service ssh start
),因为要在容器中使用 systemd。
使用 SSH 访问容器
现在容器已经配置了 SSH 服务器并在启动时自动启动。下一步是连接到运行着 SSH 服务器的 Docker 容器。
首先,需要获取容器的 IP 地址。可以使用以下命令来查找容器 IP 地址:
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_id>
通过运行以下命令与容器连接:
ssh <username>@<container_ip_address>
这样,您就可以使用 SSH 连接到容器中并执行需要的操作了。
结论
本文介绍了在 Docker 容器中开启 SSH 访问的方法。我们首先安装和配置了 SSH 服务器,然后详细解释了如何自动启用 SSH 服务,并演示了如何通过 SSH 连接到运行着 SSH 服务器的容器中。希望本文对那些需要在 Docker 中远程管理应用程序的读者提供了实用的技巧和指导。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/672d46c1ddd3a70eb6da0ff5