如何通过SSH连接到Mac容器中的Docker

use*_*191 3 beta macos ssh docker

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

我从本地存储库中提取了一个图像,并使用"docker run -d"创建了一个容器.使用'docker ps'我获得'CONTAINER ID',然后使用'docker inspect <CONTAINER_ID> | grep IPA'获取正在运行的容器的IP地址.

我现在想使用带有'ssh root @ <IP address>'的SSH连接到容器,但该命令会出现以下错误:'operation timed out'.

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

如何使用SSH连接到容器?什么是正确的命令?

更新:这不是重复(如上所述).以"您描述的方案"开头的条目是正确的解决方案.

小智 9

您描述的场景是在"普通"Docker上使用的方法.

由于Mac上的Docker是专门为Mac创建的,因此它已经过调整以使其更易于使用.因此,在Mac上无法以这种方式使用容器的IP地址.

文档Docker for Mac入门指出:

以前的beta版本使用docker作为构建URL的主机名.从此版本开始,端口将公开在VM的专用IP地址上,并转发到localhost,而不设置其他主机名.另请参见Beta 9的发行说明.

因此,SSH到容器的正确方法是使用端口映射到SSH端口在Docker for Mac上将其旋转(22).例如

 docker run -d -p 2022:22 <Image Name>
Run Code Online (Sandbox Code Playgroud)

并且使用此命令启动SSH连接(NB在指定的端口上使用'localhost',而不必确定和使用容器的IP地址):

 ssh -p 2022 root@localhost
Run Code Online (Sandbox Code Playgroud)

NB不可能简单地将端口22映射到自身,即'-p 22:22',因为这会导致以下错误(至少对我来说是这样的!):

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

  • 这是可能的,但是你是对的,在大多数情况下,主机上的SSH守护进程已经使用了22端口.错误"EADDRINUSE"表示如果再次遇到此错误,此地址已在使用中. (2认同)

Kon*_*zov 6

要使用bash提示,您可以使用docker exec -ti %container-name-or-id% /bin/bash.如果要使用ssh并确保ssh守护程序已启动并运行,则应使用以下-p参数从容器中公开相应的端口:docker run -d -p 22:22 my_image.