从主机 OS 访问 运行 容器(在 VM 内)

Accessing running container (inside VM) from host OS

我通过 multipass 在主机 Mac OSX 上设置了 3 Linux VM。我已经在这些机器上安装了 docker 并启动了一个 3 节点 docker swarm。

docker swarm init

之后,我使用以下命令创建了 2 个服务,一个用于 Postgres DB,另一个用于 drupal。

docker service create -d --name postgras-db --network test-swarm-network -e POSTGRES_PASSWORD=<password> postgres

docker service create -d  --name drupal-frontend --network test-swarm-network -p 80:80 drupal

端口 80:80 为 drupal 公开,并且这两个服务都连接到同一个覆盖网络。我的服务已启动 运行。

如果我在主机上执行所有操作,那么我将简单地执行 http://localhost:80 或 http://localhost 以获得所需的输出,但是现在 运行 它在 VM 中我如何可以从主机 MAC 测试 drupal 前端,即在主机浏览器中访问哪个 IP 以获得所需的结果。

P.S:这里没有关于 drupal 的具体内容(它可以是任何其他容器,如 Nginx 等),问题是关于从主机 [=32] 访问 运行 容器(在 VM 内) =]

您可以使用以下命令:

 docker exec -it container_name /bin/bash 

这是我自己想出来的。如需其他帮助:

我们可以通过 运行 在主机上执行以下命令来获取 运行 VM 的信息。

multipass info <VM_Name> 

喜欢

multipass info docker-vm 

它将提供有关 VM 的信息,其中还包含 VM 所在的 IP 运行

multipass info docker-vm
Name:           docker-vm 
State:          Running
IPv4:           192.168.xx.x
                172.xx.x.x
Release:        Ubuntu 20.04.3 LTS
Image hash:     3d7282d3e92b (Ubuntu 20.04 LTS)
Load:           0.08 0.15 0.09
Disk usage:     2.2G out of 4.7G
Memory usage:   264.6M out of 976.9M

用户可以从这里复制 IP 地址并将其粘贴到主机浏览器中,这将访问 VM 的端口 80(默认情况下)。

谢谢