问题描述
我知道 SO 上也有类似的问题,但许多建议对我不起作用。我正在运行 Docker Desktop for Mac,我启动了一个我构建的 docker 容器,该容器配置并运行了 ssh(我使用这些容器连接到 AWS、Azure 等)。我用类似的东西启动容器(ubc/jlbase/jlbase 镜像有 ssh 配置......以下所有内容都适用于具有 docker0 网络的 linux 机器)
docker run -P --name test -d ubc/jlbase/jlbase
docker inspect test |grep IP
ping -c *the_ip_from_above*
未连接。据我所知,这是 Mac 上 Docker 的一个已知问题……但我找到的帮助和链接似乎并没有解决问题。有人能告诉我我错过了什么吗?
解决方法
你可以说这是 Docker 在 Mac 上的一个已知特性,而不是一个问题。 Mac 上的 Docker 运行在 macOS 内部的虚拟机上,因此您收到的 IP 地址是 VM 内部容器的 IP,而不是 macOS。
解决问题中的两个问题:
如何启用 ssh
为了能够在您的容器上ssh
,您需要在容器中运行 sshd
并发布端口 22
。检查 here 以了解如何使用已准备好的容器尝试此操作
如何ping
由于 docker 在 VM 内运行,为了能够将流量路由到容器,您需要设置网络层来路由流量。一种方法是在 VM 和机器之间创建隧道。
这是更复杂的设置,需要 CNF(Conteinerized Network Function)的帮助。为这个问题创建的最简单的 CNF 之一是 soctun,它在主机和 docker 网络层之间创建了一个隧道。