Docker 是一种轻量级的虚拟化技术,它可以让开发者将应用程序与其依赖项打包为一个独立的容器中。这样,整个应用程序与依赖项就可以移植到任何支持 Docker 的系统中。Docker 容器已成为前端开发中必不可少的一部分。在实际的使用中,我们可能会遇到 Docker 容器中的 SSH 访问问题。在本文中,我们将探讨 Docker 容器中 SSH 访问问题的原因以及解决方式。
问题描述
在 Docker 容器中 SSH 登录时,您可能会遇到以下问题:
- 连接被重置。
- 无法连接。
- 连接被拒绝。
这些问题的原因可能是 Docker 容器中 SSH 服务没有正确配置。
解决方式
使用 SSH 客户端连接 Docker 容器
在访问 Docker 容器之前,您需要了解 Docker 容器的 IP 地址。要获取 Docker 容器的 IP 地址,您可以使用以下命令:
docker inspect <container_id> | grep IPAddress | cut -d '"' -f 4
其中 <container_id>
是 Docker 容器的 ID。
使用以上命令获取 Docker 容器的 IP 地址后,您可以使用 SSH 客户端连接 Docker 容器。
ssh <user>@<ip_address>
其中 <user>
是您在 Docker 容器中要连接的用户。
配置 Docker 容器中的 SSH 服务
要在 Docker 容器中启用 SSH 服务,您需要在 Dockerfile 文件中添加以下命令:
RUN apt-get install -y ssh RUN mkdir /var/run/sshd RUN echo 'root:screencast' | chpasswd RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
该命令将在 Docker 容器中安装 SSH 并启用 root 用户的 SSH 登录。
要使用 SSH 登录 Docker 容器中的其他用户,您需要在 Dockerfile 文件中添加以下命令:
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
该命令将在 Docker 容器中创建一个名为 docker 的用户,该用户可以使用 SSH 登录。
允许 Docker 容器中的 SSH 服务通过防火墙
在某些情况下,您可能需要通过防火墙允许 Docker 容器中的 SSH 服务。您可以使用以下命令允许 Docker 容器中的 SSH 服务通过防火墙。
sudo ufw allow ssh
使用 SSH 密钥连接 Docker 容器
在某些情况下,您可能需要使用 SSH 密钥连接 Docker 容器。要使用 SSH 密钥连接 Docker 容器,您需要在 Docker 容器中创建一个名为 authorized_keys
的文件。该文件应该包含要访问 Docker 容器的 SSH 密钥的公钥。
mkdir -p ~/.ssh touch ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
在 authorized_keys
文件中添加公钥,如下所示。
echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxxxxxxxxxxxxxxxxxx user@host" >> ~/.ssh/authorized_keys
使用 Docker Compose
如果您使用的是 Docker Compose,并且要在容器之间进行 SSH 连接,则可以添加以下代码段以启用 SSH。
version: '3' services: ssh: build: . command: /usr/sbin/sshd -D ports: - "2222:22"
该代码段将在 Docker Compose 文件中启用 SSH 并将端口转发到 Docker 容器中的 22 号端口。要连接 Docker Compose 中的 Docker 容器,请运行以下命令。
ssh -p 2222 root@localhost
以上是在 Docker 容器中 SSH 访问问题及解决方式的详细介绍。通过本文您可以掌握 Docker 容器中 SSH 访问的相关知识,并解决实际应用中可能出现的问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67972bc1504e4ea9bde356ed