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

时间:2017-05-10 21:25:56

标签: angularjs api nginx docker communication

我开发了一个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:

1 个答案:

答案 0 :(得分:1)

链接在网络上为服务创建DNS名称。您应该与web_admin进行api_admin:5000服务对话,而不是localhost:5000api_admin DNS名称将解析为api_admin服务之一的IP地址。

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

  

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