Docker撰写和服务通信

时间:2020-07-27 16:56:46

标签: node.js docker docker-compose

我有一个包含5个必须通信的服务的docker-compose。 我使用docker network inspect networkname_dafult检查了它们是否在同一网络中 我可以在同一网络中找到所有应用程序。 inspect的结果返回了一个带有name属性的json。

            ```"Name": "app_1",```

在每个服务中,我都使用该名称发出http请求,但它们返回 例如"connect ECONNREFUSED 127.0.0.1:5003"

如果我访问localhost:5003,它将起作用,并且将对每个服务起作用。

如果我尝试使用localhost:port从我的应用程序发出http请求,那么它也不起作用。

我的dockercompose.yml

version: "3.7"

services:
    App1:
        image: user/app1
        ports:
           - 5001:5001
        links:
            - App2
            - App3
            - App4
            - App5
        hostname: app1
    App2:
        image: user/app2
        ports:
           - 5002:5002
        hostname: app2
    App3:
        image: user/app3
        ports:
           - 5003:5003
        hostname: app3
    App4:
        image: user/app4
        ports:
           - 5004:5004
        hostname: app4
    App5:
        image: user/app5
        ports:
           - 5005:5005
        hostname: app5   

我尝试使用主机名,Appx等发出http请求。我无法使它们彼此通信。

我在这里可能会想念什么?

2 个答案:

答案 0 :(得分:0)

创建一个网络,并将服务的所有部分分配给该网络。一个例子:

version: '3.7'

networks:
  app_net:
    driver: bridge

services:
  App1:
    image: user/app1
    ports:
       - 5001:5001
    networks:
       - app_net
    hostname: app1
  App2:
    image: user/app2
    ports:
       - 5002:5002
    networks:
       - app_net
    hostname: app2
  App3:
    image: user/app3
    ports:
       - 5003:5003
    networks:
       - app_net
    hostname: app3
  App4:
    image: user/app4
    ports:
      - 5004:5004
    networks:
      - app_net
    hostname: app4
  App5:
    image: user/app5
    ports:
      - 5005:5005
    networks:
      - app_net
    hostname: app5

但是可能是我缺少了一些东西。要考虑的另一件事是使用links-更多信息here。另外,如果您要复制并粘贴此代码,请注意缩进。

答案 1 :(得分:0)

Docker-compose已经创建了一个默认网络。 我运行docker network ls来查看哪些网络可用 并使用docker network inspect mynetwork来查看我的docker-compose上的应用程序是否在同一网络上运行(将会)。

泊坞窗网络检查的结果是一组容器对象。 每个容器对象都有一个name属性(这是我在服务之间建立http连接所需要的信息)

 "Containers": {
            "01fcacc2b2dc8450c5c75e": {
                "Name": "myapp_1",
                "EndpointID": "9e3fa9633d9d1692d4f7120c",
                "MacAddress": "00:00:00:00:00:00",
                "IPv4Address": "172.33.0.2/16",
                "IPv6Address": ""
            },

在执行http请求的每项服务中,我都使用该属性名称进行请求。

axios.get(http://myapp_1)

一个重要的细节是在更改容器后重建它!

docker build -t myapp .

当我再次运行docker-compose时,一切正常。