如何SSH在Mac容器中的Docker

我正在运行Docker for Mac(版本1.12.0-rc2-beta16(Build:9493))。

我已经从我的本地存储库中拉出一个图像,并使用“docker run -d”来创build一个容器。 使用'docker ps'我获得了'CONTAINER ID',然后用'docker inspect <CONTAINER_ID> | grep IPA“来获取正在运行的容器的IP地址。

我现在想用'ssh root @ <IP地址>'使用SSH连接到容器,但是该命令给出了以下错误:'操作超时'。

进一步的调查显示,我无法ping <IP地址> – >'请求超时为icmp_seq 0'

我怎样才能连接到容器使用SSH? 什么是正确的命令?

更新:这不是重复(如上所述)。 开始“你描述的场景”的条目是正确的解决scheme。

要使用bash提示符,可以使用docker exec -ti %container-name-or-id% /bin/bash 。 如果你想使用ssh,并确保一个ssh守护进程正常运行,你应该使用-p参数暴露容器中相应的端口,如下所示: docker run -d -p 22:22 my_image

你所描述的场景是在“普通”Docker上使用的方法。

由于Mac上的Docker专门为Mac而创build,所以经过调整,使其更易于使用。 因此,在Mac上不能以这种方式使用容器的IP地址。

Docker for Mac入门文档指出:

以前的testing版本使用docker作为主机名来构buildURL。 从此版本转发,端口暴露在虚拟机的私有IP地址,并转发到本地主机,没有其他主机名设置。 另请参阅Beta 9的发行说明。

因此,将SSH连接到容器的正确方法是使用端口映射到SSH端口(22)在Docker for Mac上启用它。 例如

  docker run -d -p 2022:22 <Image Name> 

SSH连接是使用这个命令(注意在指定的端口上使用“localhost”而不是必须确定和使用容器的IP地址):

  ssh -p 2022 root@localhost 

注意这是不可能的简单地映射端口22自己即'-p 22:22',因为这导致了以下错误(至less是为我做的!):

docker:来自守护程序的错误响应:驱动程序无法在terminal上编程外部连接pensive_wilson(2e832b82fc67d3e48864975c6eb02f6c099e34eee64b29634cfde286c41e00a7):启动userland代理时出错:无法绑定:EADDRINUSE。