【问题标题】:Accessing running container (inside VM) from host OS从主机操作系统访问正在运行的容器(在 VM 内)
【发布时间】:2022-02-25 04:17:57
【问题描述】:

我已经通过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 中运行它时,我如何测试 drupal 前端主机 MAC,即在主机浏览器中点击哪个 IP 以获得所需的结果。

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

【问题讨论】:

    标签: linux docker virtual-machine docker-swarm multipass


    【解决方案1】:

    您可以使用以下命令:

     docker exec -it container_name /bin/bash 
    

    【讨论】:

    • 一个好的答案将始终包括解释为什么这会解决问题,以便 OP 和任何未来的读者可以从中学习。
    • 这个问题与我如何在浏览器中检查我的前端有关,就在 VM 上运行命令而言,我已经能够做到这一点。我对可以从主机操作系统访问的 VM 的 IP 地址感兴趣。
    【解决方案2】:

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

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

    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(默认情况下)。

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多