我有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服务?
谢谢!
答案 0 :(得分:1)
您可以为website-service
和api-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
。