从主机操作系统访问正在运行的容器(虚拟机内部)

问题描述 投票:0回答:3

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

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

linux docker virtual-machine docker-swarm multipass
3个回答
0
投票

您可以使用以下命令:

 docker exec -it container_name /bin/bash 

0
投票

我自己发现了这一点。如需其他帮助:

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

multipass info <VM_Name> 

喜欢

multipass info docker-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 地址并将其粘贴到主机浏览器中,该浏览器将访问虚拟机的端口 80(默认情况下)。

谢谢


0
投票

@Abdul:我遇到了同样的问题,但你提到的解决方案对我不起作用。您是否还做了其他任何事情,但忘记在解决方案中捕获? 根据我的理解,覆盖网络创建了一个路由网格,因此无论您使用哪个 IP 来访问 swarm/集群上的服务,该服务仍然会受到攻击。我正在使用由 multipass 管理并由 Docker Swarm 编排的虚拟机集群。我有两个与你相同的容器 - drupal:9 和 postgres:14。当我获取 IP (10.199.127.84) 并尝试使用它访问 Drupal 时,出现“站点无法访问”错误。知道我在这里缺少什么吗?

enter image description here

附注很抱歉将其作为回复,但我没有足够的“声誉”来评论您的回复/标记答案。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.