SSH 直接进入 docker 容器

SSH directly into a docker container

我有一些 docker 容器,现在我想使用 ssh 访问其中一个。多数民众赞成我通过ssh连接到docker容器。

但现在我遇到了一个问题,我不知道哪个用户可以访问这个容器?

我已经在主机上的两个用户(web 和 root)上试过了。但它们不起作用。 知道些什么?

您可以直接放入 运行 容器中:

$ docker exec -it myContainer /bin/bash

您可以在非 运行 的容器上获得 shell:

$ docker run -it myContainer /bin/bash

这是在容器上获取​​ shell 的首选方法。 运行 SSH 服务器被认为不是一个好的做法,尽管有一些用例,但应尽可能避免。

更强大的解决方案是将 nsenter 下拉到您的服务器,然后从那里 sshing 并 运行ning docker-enter。这样你就不需要 运行 容器中的多个进程(ssh 服务器 + 容器的任何用途),或者担心 ssh 用户等的所有额外开销(更不用说安全问题)。

如果您想直接连接到 Docker 容器,而不连接到 docker 主机,您的 Docker 文件应包括以下内容:

# SSH login fix. Otherwise user is kicked off after login
RUN echo 'root:pass' | chpasswd
RUN mkdir /var/run/sshd
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

然后使用带有 -p 和 -d 标志的 docker 运行。示例:

docker run -p 8022:22 -d your-docker-image

您可以联系:

ssh root@your-host -p8022

容器背后的想法是容器运行单个进程,以便它可以被守护进程监控。如果这个过程停止 ||由于某种原因失败,它可以根据您在配置中的偏好重新启动。 ssh 服务器是一个 运行 进程。因此,如果您需要通过 ssh 访问您的设置,请创建一个 ssh 服务器服务,它可以与设置中 运行 旁边的其他容器共享卷。

直接在主机中的容器上打开 shell:

假设您在家中的 PC 上,并且您有一台运行 docker 并具有 运行 个容器的远程计算机,并且您想直接在容器上打开一个 shell在远程主机上没有 "stopping by": (-t 标志暴露了 tty)

ssh -t user@remote.host 'docker exec -it running_container_name /bin/bash'

如果您已经在主机上,喜欢采纳的答案: (-i interactive -t tty)

docker exec -it running_container_name /bin/bash

1.issue命令docker inspect (containerId or name)

你会得到这样的结果

   "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "my_bridge": {
                    "IPAMConfig": {
                        "IPv4Address": "172.17.0.20"
                    },
                    "Links": null,
                    "Aliases": [
                        "3784372432",
                        "xxx",
                        "xxx2"
                    ],
                    "NetworkID": "ff7ea463ae3e6e6a099e0e044610cdcdc45b21f7e8c77a814aebfd3b2becd306",
                    "EndpointID": "6be4ea138f546b030bb08cf2c8af0f637e8e4ba81959c33fb5125ea0d93af967",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.20",
                    "IPPrefixLen": 24,
...

  1. 从那里读出并复制 IP 地址,通过命令 ssh existingUser@IpAddress 连接到它,例如 someExistingUser@172.17.0.20。如果用户不存在,则在来宾映像中创建他,最好具有 sudo 权限。可能不要直接使用 root 用户,因为据我所知,该用户预设为通过 ssh 密钥连接到图像,或者具有预设密码并更改它可能最终导致无法 ssh 连接到通过常规方式进行图像终端 docker exec -it containerName /bin/bashdocker-compose exec containerName /bin/bash

在某些情况下,在 docker 容器中启用 SSH 很有用,特别是当我们想要测试一些脚本时。

下面的 link 给出了一个很好的示例,说明如何在启用 ssh 的情况下创建和映像以及如何获取它的 IP 并连接到它。

Here