首页 > 解决方案 > (Google Compute VM)如何在 docker-compose 中获取容器进行连接

问题描述

我试图让 docker-compose 中的 angular 和 nginx 容器在 google-compute vm 实例(Debian OS)上相互交谈,但没有成功。这是我的 docker-compose.yml:

version: '3'
services:
  angular:
    container_name: angular
    hostname: angular
    build: project-frontend
    ports:
      - "80:80"
        #network_mode: host
  nodejs:
    container_name: nodejs
    hostname: nodejs
    build: project-backend
    ports:
      - "8080:8080"
        # network_mode: host

我已经阅读了文档和许多诸如此类的帖子并且了解 angular 应该尝试在http://nodejs:8080/处查找节点,但我得到了:

POST http://nodejs:8080/login/ net::ERR_NAME_NOT_RESOLVED

当我这样做时,docker networkk inspect我看到了这个

[
    {
        "Name": "project_default",
        "Id": "2d1665ce09f712457e706b83f4ae1139a846f9ce26163e07ee7e5357d4b28cd3",
        "Created": "2020-05-22T11:25:22.441164515Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.28.0.0/16",
                    "Gateway": "172.28.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "b0fceb913ef14b0b867ae01ce4852ad4a0827c06194102082c0d4b18d7b80464": {
                "Name": "angular",
                "EndpointID": "83fba04c3cf6f7af743cae87116730805d030040f286706029da1c7a687b199c",
                "MacAddress": "02:42:ac:1c:00:03",
                "IPv4Address": "172.28.0.3/16",
                "IPv6Address": ""
            },
            "c181cd4b0e9ccdd793c4e1fc49067ef4880cda91228a10b900899470cdd1a138": {
                "Name": "nodejs",
                "EndpointID": "6da8ad2a83e2809f68c310d8f34e3feb2f4c19b40f701b3b00b8fb9e6f231906",
                "MacAddress": "02:42:ac:1c:00:02",
                "IPv4Address": "172.28.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }

我不确定还有哪些其他步骤可以帮助我进行调试。谢谢。

编辑:感谢这篇文章,我尝试通过 angular 容器成功 ping nodejs 容器:

$ sudo docker exec -it angular ping nodejs
PING nodejs (172.28.0.2): 56 data bytes
64 bytes from 172.28.0.2: seq=0 ttl=64 time=0.079 ms
64 bytes from 172.28.0.2: seq=1 ttl=64 time=0.105 ms

我还尝试在 nodejs 容器上测试端口,它似乎在那里:

$ sudo docker port nodejs
8080/tcp -> 0.0.0.0:8080

编辑:我开始认为这是一个谷歌计算 VM 问题,因为我在本地 linux 机器上运行它没有任何问题......已相应更新了标题

标签: dockerdocker-composegoogle-compute-enginedocker-networking

解决方案


您需要确保它们在同一个网络上。您可以通过在最后的撰写文件中添加以下行来做到这一点

networks:
  default:
    external:
      name: project.local

请注意,您必须创建project.local网络。当你运行docker-compose up它会告诉你如何去做。


推荐阅读