Вызов службы из одного док-контейнера в другой контейнер вызывает net :: ERR_NAME_NOT_RESOLVED - PullRequest
0 голосов
/ 23 декабря 2018

я запускаю приложение с несколькими контейнерами, как показано ниже ..

feeder - это простой контейнер nodejs из узла изображения: alpine

api - это контейнер nodejs с expressjs из узла изображения: alpine

ui-app - это контейнер реагирования приложения из узла изображения: alpine

Я пытаюсь вызвать APIобслуживание в пользовательском приложении. Я получаю сообщение об ошибке, как показано ниже:

изображение в журнале консоли

изображение в журнале консоли

нетконечно, что вызывает проблему

, если я получаю доступ к сервисам как http://192.168.99.100/ping, это работает (это 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 голосов
/ 23 декабря 2018

Вы можете использовать имя службы в качестве имени домена только тогда, когда находитесь внутри контейнера.В том случае, если ваш браузер выполняет вызов, он не знает, что такое api.В вашем веб-приложении у вас должен быть базовый URL-адрес типа env, равный ip вашего докера или локального хоста.

...