从一个Docker容器到另一个容器的调用服务导致net :: ERR_NAME_NOT_RESOLVED

时间:2018-12-22 21:08:14

标签: node.js docker express docker-compose

我正在运行具有以下多个容器的应用程序。

feeder -是来自image node:alpine的简单nodejs容器

api -是具有来自图像节点:高山

的expressjs的nodejs容器

ui-app -是来自图像节点:高山

的应用容器

我正在尝试在ui-app中调用api服务,但出现以下错误

image to Console Log

image to Console Log

不确定是什么原因引起的问题

如果我以http://192.168.99.100/ping的身份访问服务,则它有效(这是我的docker计算机的默认IP)... 但是,如果我使用的容器名称为http://api:3200/ping之类的,则无法使用...?请帮助。

以下是我的docker-compose。

version: '3'

services:
  feeder:
    build: ./feeder
    container_name: feeder
    tty: true
    depends_on:
      - redis
    links:
      - redis
    environment:
      - IS_FROM_DOCKER=true
    ports:
      - "3100:3100"
    networks:
      - hmdanet        
  api:
    build: ./api
    container_name: api
    tty: true
    depends_on:
      - feeder
    links:
      - redis
    environment:
      - IS_FROM_DOCKER=true
    ports:
      - "3200:3200"
    networks:
      hmdanet:
        aliases:
          - "hmda-api"
  ui-app:
    build: ./ui-app
    container_name: ui-app
    tty: true
    depends_on:
      - api
    links:
      - api
    environment:
      - IS_FROM_DOCKER=true
    ports:
      - "3000:3000"
    networks:
      - hmdanet          
  redis:
    image: redis:latest    
    ports:
      - '6379:6379'
    networks:
      - hmdanet          
networks:
  hmdanet:
    driver: bridge

1 个答案:

答案 0 :(得分:0)

只有在容器内时,才能将服务名称用作域名。如果是您的浏览器在打电话,它不知道api是什么。在您的Web应用程序中,您应该将类​​似于env的基本URL设置为docker机器或localhost的ip。