我正在使用具有端口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”。
答案 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/