我正在运行Docker for Mac(版本1.12.0-rc2-beta16(版本:9493))。
我从本地存储库中提取了一个图像,并使用“docker run -d”创建了一个容器。使用'docker ps'我获得'CONTAINER ID',然后使用'docker inspect< CONTAINER_ID> | grep IPA'获取正在运行的容器的IP地址。
我现在想使用SSH连接到容器'ssh root @< IP address>'但该命令给出以下错误:'操作超时'。
进一步调查显示我无法ping< IP地址> - > '请求icmp_seq 0超时'
如何使用SSH连接到容器?什么是正确的命令?
更新:这不是重复(如上所述)。以“您描述的方案”开头的条目是正确的解决方案。
答案 0 :(得分:9)
您所描述的场景是将在“普通”Docker上使用的方法。
由于Mac上的Docker是专门为Mac创建的,因此它已被调整以使其更易于使用。因此,在Mac上无法以这种方式使用容器的IP地址。
文档Getting Started with Docker for Mac声明:
以前的测试版使用docker作为构建URL的主机名。 从此版本开始,端口将在私有IP上公开 VM的地址并转发到localhost而没有其他主机名 组。另请参见Beta 9的发行说明。
因此,SSH到容器的正确方法是使用端口映射到SSH端口在Docker for Mac上将其旋转(22)。 e.g。
docker run -d -p 2022:22 <Image Name>
使用此命令启动SSH连接(N.B.它在指定的端口上使用'localhost',而不必确定和使用容器的IP地址):
ssh -p 2022 root@localhost
N.B。不可能简单地将端口22映射到自身,即'-p 22:22',因为这会导致以下错误(至少对我来说是这样的!):
docker:来自守护程序的错误响应:驱动程序无法编程外部 终端上的连接性pensive_wilson (2e832b82fc67d3e48864975c6eb02f6c099e34eee64b29634cfde286c41e00a7): 启动userland代理时出错:无法绑定:EADDRINUSE。
答案 1 :(得分:5)
要使用bash提示,您可以使用cxLabel1.MyStuff.DoSomething();
。如果要使用ssh并确保ssh守护程序已启动并运行,则应使用docker exec -ti %container-name-or-id% /bin/bash
参数从容器中公开相应的端口,如下所示:-p
。