如何在容器之间通信?

时间:2018-11-18 01:55:55

标签: docker docker-compose dockerfile

我正在使用具有端口80的api网关的容器,并且我需要在另一个容器之间通信api网关(所有这些都使用dockerfile和docker-compose)。这些其他约束者如何不将端口暴露给localhost而是与api网关进行内部通信?

我的docker-compose:

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”。

2 个答案:

答案 0 :(得分:1)

您要使用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

答案 1 :(得分:0)

使用docker网络。这是docker网站上的一个非常好的教程,介绍如何使用网络黑白容器:https://docs.docker.com/network/network-tutorial-standalone/