【问题标题】:How do I SSH to a Docker in Mac container [duplicate]如何通过 SSH 连接到 Mac 容器中的 Docker [重复]
【发布时间】:2016-10-24 06:18:57
【问题描述】:

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

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

我现在想使用带有“ssh root@”的 SSH 连接到容器,但该命令给出以下错误:“操作超时”。

进一步调查显示我无法 ping -> 'Request timeout for icmp_seq 0'

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

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

【问题讨论】:

  • 您使用的映像可能未针对 SSH 进行配置。虽然关于 Docker 的一些问题与编程松散相关,但这个不是。这是一个网络/系统管理员问题,与“如何在 Linux 中启用 SSH?”没有什么不同
  • 我投票结束这个问题,因为它与编程无关。
  • 请参阅stackoverflow.com/questions/39739560/… 以获得专门针对“Docker for Mac”的答案

标签: macos ssh docker beta


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    由于 Mac 上的 Docker 是专门为 Mac 从头开始​​创建的,因此它已经过调整以使其更易于使用。因此,容器的IP地址在Mac上是不能这样使用的。

    文档Getting Started with Docker for Mac 指出:

    以前的 beta 版本使用 docker 作为主机名来构建 URL。 从此版本开始,端口在私有 IP 上公开 VM 的地址并转发到没有其他主机名的 localhost 放。另请参阅 Beta 9 的发行说明。

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

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

    并且 SSH 连接是使用此命令发起的(注意它在指定的端口上使用“localhost”,而不必确定和使用容器的 IP 地址):

     ssh -p 2022 root@localhost
    

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

    docker:来自守护进程的错误响应:驱动程序外部编程失败 端点 pensive_wilson 上的连接 (2e832b82fc67d3e48864975c6eb02f6c099e34eee64b29634cfde286c41e00a7): 启动用户态代理时出错:无法绑定:EADDRINUSE。

    【讨论】:

    • 有可能,但你是对的,在大多数情况下,主机上的 SSH 守护进程已经使用了 22 端口。错误“EADDRINUSE”表示该地址已被使用,以防再次遇到此错误。
    • 更清楚一点:如果您需要它来使用主机上的端口 22,则必须关闭主机自己的 SSHd 实例。
    猜你喜欢
    • 2017-06-30
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2014-10-15
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多