我开发了一个Angular App,它通过Nginx与UWSGI Flask Api进行通信。目前我有3个容器(Angular [web_admin],Api [api_admin],Nginx [nginx])
当我在我的开发机器中运行时,通信工作正常。角度请求通过url:http://localhost:5000和api响应很好,一切都运行良好。
但是当我将它部署到我的Production Server时,我注意到该应用程序无法运行,因为我的防火墙中没有打开端口5000。
我的问题很简单,如何通过内部网络调用api容器,而不是从外部调用它?
version: '2'
services:
data:
build: data
neo4j:
image: neo4j:3.0
networks:
- back
volumes_from:
- data
ports:
- "7474:7474"
- "7473:7473"
- "7687:7687"
volumes:
- /var/diariooficial/neo4j/data:/data
web_admin:
build: frontend/web
networks:
- front
- back
ports:
- "8001:8001"
depends_on:
- api_admin
links:
- "api_admin:api_admin"
volumes:
- /var/diariooficial/upload/diario_oficial/:/var/diariooficial/upload/diario_oficial/
api_admin:
build: backend/api
volumes_from:
- data
networks:
- back
ports:
- "5000:5000"
depends_on:
- neo4j
- neo4jtest
volumes:
- /var/diariooficial/upload/diario_oficial/:/var/diariooficial/upload/diario_oficial/
nginx:
build: nginx
volumes_from:
- data
networks:
- back
- front
ports:
- "80:80"
- "443:443"
volumes:
- /var/diariooficial/log/nginx:/var/log/nginx
depends_on:
- api_admin
- web_admin
networks:
front:
back:
答案 0 :(得分:1)
链接在网络上为服务创建DNS名称。您应该与web_admin
进行api_admin:5000
服务对话,而不是localhost:5000
。 api_admin
DNS名称将解析为api_admin
服务之一的IP地址。
请参阅https://docs.docker.com/compose/networking/获取解释,具体为:
现在,每个容器都可以查找主机名web或db,并获取相应容器的IP地址。例如,web的应用程序代码可以连接到URL postgres:// db:5432并开始使用Postgres数据库。