Mac 上的 Docker 桌面问题与 ssh 到本地主机上的 centos 容器 如何启用 ssh如何ping

问题描述

我知道 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 网络层之间创建了一个隧道。