如何使用 IP 地址通过 SSH 访问 docker 容器?
How to access to a docker container via SSH using IP address?
我在 Linux 机器上使用 NVIDIA Docker (Ubuntu 20.04)。我使用 nvidia/cuda:11.0-base
图像创建了一个名为 user1
的容器,如下所示:
docker run --gpus all --name user1 -dit nvidia/cuda:11.0-base /bin/bash
而且,这是我看到的 运行 docker ps -a
:
admin@my_desktop:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a365362840de nvidia/cuda:11.0-base "/bin/bash" 3 seconds ago Up 2 seconds user1
我想通过 ssh
使用其唯一的 IP 地址从完全不同的机器(而不是 my_desktop
,它是主机)访问该容器。首先,可不可以给每个容器一个唯一的IP地址?如果是这样,我该怎么做?提前致谢。
如果你想从外部 VM 使用 ssh 访问你的容器,你需要执行以下操作
- 为您的容器安装 ssh 守护进程
- 运行 容器并公开其 ssh 端口
我建议使用以下 Dockerfile,它从 nvidia/cuda:11.0-base
构建并创建一个内部包含 ssh 守护程序的映像
Dockerfile
# Instruction for Dockerfile to create a new image on top of the base image (nvidia/cuda:11.0-base)
FROM nvidia/cuda:11.0-base
ARG root_password
RUN apt-get update || echo "OK" && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo "root:${root_password}" | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
从 Dockerfile 构建镜像
docker image build --build-arg root_password=password --tag nvidia/cuda:11.0-base-ssh .
创建容器
docker container run -d -P --name ssh nvidia/cuda:11.0-base-ssh
运行 docker ps
看container port
最后访问容器
ssh -p 49157 root@<VM_IP>
编辑:正如 David Maze 正确指出的那样。您应该知道 root 密码将在 image history
中可见。同样这种方式会覆盖原来的容器进程。
如果要采用此流程,则需要对其进行修改,以备生产使用。对于希望将 ssh 添加到他的容器的人来说,这是一个起点。
我在 Linux 机器上使用 NVIDIA Docker (Ubuntu 20.04)。我使用 nvidia/cuda:11.0-base
图像创建了一个名为 user1
的容器,如下所示:
docker run --gpus all --name user1 -dit nvidia/cuda:11.0-base /bin/bash
而且,这是我看到的 运行 docker ps -a
:
admin@my_desktop:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a365362840de nvidia/cuda:11.0-base "/bin/bash" 3 seconds ago Up 2 seconds user1
我想通过 ssh
使用其唯一的 IP 地址从完全不同的机器(而不是 my_desktop
,它是主机)访问该容器。首先,可不可以给每个容器一个唯一的IP地址?如果是这样,我该怎么做?提前致谢。
如果你想从外部 VM 使用 ssh 访问你的容器,你需要执行以下操作
- 为您的容器安装 ssh 守护进程
- 运行 容器并公开其 ssh 端口
我建议使用以下 Dockerfile,它从 nvidia/cuda:11.0-base
构建并创建一个内部包含 ssh 守护程序的映像
Dockerfile
# Instruction for Dockerfile to create a new image on top of the base image (nvidia/cuda:11.0-base)
FROM nvidia/cuda:11.0-base
ARG root_password
RUN apt-get update || echo "OK" && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo "root:${root_password}" | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
从 Dockerfile 构建镜像
docker image build --build-arg root_password=password --tag nvidia/cuda:11.0-base-ssh .
创建容器
docker container run -d -P --name ssh nvidia/cuda:11.0-base-ssh
运行 docker ps
看container port
最后访问容器
ssh -p 49157 root@<VM_IP>
编辑:正如 David Maze 正确指出的那样。您应该知道 root 密码将在 image history
中可见。同样这种方式会覆盖原来的容器进程。
如果要采用此流程,则需要对其进行修改,以备生产使用。对于希望将 ssh 添加到他的容器的人来说,这是一个起点。