首页 > 解决方案 > 如何在容器之间进行通信?

问题描述

我在端口 80 中使用带有 api 网关的容器,并且我需要在另一个容器之间通信 api 网关(所有这些都使用 dockerfile 和 docker-compose)。我怎样才能让这些其他容器不将端口暴露给 localhost 但在内部与 api 网关通信?

我的码头工人撰写:

version: '3'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./:/usr/src/app
      - /usr/src/app/node_modules
    ports:
      - "3000:3000"

解决方案:

将 docker-compose 文件更改为:

version: '3.5'

    services:
      app:
        build:
          context: .
          dockerfile: Dockerfile
        volumes:
          - ./:/usr/src/app
          - /usr/src/app/node_modules
        expose:
          - "3000"
        image: api-name-service
        container_name: api-name-service
        networks: 
          - api-network

networks:
  api-network:
       name: api-network-service

当服务在同一网络中时,该服务可以使用服务名称进行通信,例如“ http://api-name-service:3000 ”。

标签: dockerdocker-composedockerfile

解决方案


您想使用expose而不是ports

https://docs.docker.com/compose/compose-file/compose-file-v2/#expose

例如:

services:
    app1:
        expose:
            - "3000"
    app2:
        ...

假设 app1 的 3000 端口上有一些 API,那么 app2 就可以访问http://app1:3000/api


推荐阅读