Docker-Compose – 与“内部”Api通信。

我开发了一个Angular App,通过Nginx与UWSGI Flask Api进行通信。 目前我有3个容器(Angular [web_admin],Api [api_admin],Nginx [nginx])

当我在我的开发机器上运行它时,通信工作正常。 angular度请求通过url: http:// localhost:5000和api响应很好,一切正常。

但是当我将它部署到我的生产服务器时,我注意到应用程序无法正常工作,因为端口5000未在我的防火墙中打开。

我的问题很简单,我如何通过内部networking调用angular容器,调用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: 

链接在networking上为服务创buildDNS名称。 您应该将api_admin:5000服务与api_admin:5000对话,而不是localhost:5000api_admin DNS名称将parsing为其中一个api_admin服务的IP地址。

请参阅https://docs.docker.com/compose/networking/以获得解释,具体为:

每个容器现在可以查找主机名web或db,并取回适当的容器的IP地址。 例如,Web的应用程序代码可以连接到URL postgres:// db:5432并开始使用Postgres数据库。