9阅网

您现在的位置是:首页 > 知识 > 正文

知识

docker - (谷歌计算虚拟机)如何让docker-compose中的容器进行连接?

admin2022-11-05知识19

我试图让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

我已经阅读了 文件 和众多的SO职位,如 这个的节点,并理解为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 constainer上,它似乎在那里。

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

EDIT:我开始认为这是一个谷歌计算虚拟机的问题,因为我有它在我的本地linux盒子上运行,没有任何问题......已经相应地更新了标题。



【回答】:

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

networks:
  default:
    external:
      name: project.local

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

【回答】:

正如 @ShipluMokaddim 所说的,容器必须在同一个网络中,否则他们无法听到对方的声音,我建议创建一个新的网络。

version: '3'
services:
   angular:
      container_name: angular
      build: project-frontend
      ports:
        - "80:80"
      networks:
         - mynetwork
   nodejs:
     container_name: nodejs
     build: project-backend
     ports:
       - "8080:8080"
     networks:
       - mynetwork

networks:
   mynetwork:

这样就可以了