Docker容器通讯

时间:2018-08-07 21:15:15

标签: security docker docker-compose

我有2个容器,它们通过开放的端口相互通信。但是说我有(网站容器)Domain.com/api-> 5000:5001(api容器),因此网站接受了一个请求,并告诉api做一些工作。我很担心,因为它们都托管在同一个域中,该网站只是一个抽象/入口点,因此用户无需执行Domain.com/api,而是可以执行Domain.com:5001/api来直接进入api容器。这是一个示例docker-compose文件

version: '3'
services:
  api-service:
  build: ./nlpapi
  ports:
    - 5001:80

  website-service:
    build: ./tweetnlpwebsite
    volumes:
      - ./tweetnlpwebsite:/usr/src/app
    ports:
      - 5000:80
    depends_on:
      - api-service

我是docker的新手,但我对这个文件的理解是,docker主机有两个容器,方法是通过端口5001连接到docker host,您获得了Web容器的端口80,并显示了页面。通过5000连接到主机,您可以向其发出URL请求,由于api容器暴露在该端口上,因此它将响应。

如何使这些容器能够在内部安全地相互通信,并且仅进行请求/访问Web服务?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以为website-serviceapi-service创建用户定义的网络以相互通信,然后仅将website-service发布到外界。

version: '3'
services:
  api-service:
    build: ./nlpapi
    networks:
      - app

  website-service:
    build: ./tweetnlpwebsite
    volumes:
      - ./tweetnlpwebsite:/usr/src/app
    ports:
      - 5000:80
    depends_on:
      - api-service
    networks:
      - app

networks:
  - app

现在,website-service可以在api-service到达api-service:80,但是外界无法直接访问api-service