Docker контейнерная сеть не работает должным образом - PullRequest
0 голосов
/ 09 января 2019

Я создал два образа докера и запустил их, используя docker compose.

docker-compose.yaml

version: '2'
services:
  dmgr:
    hostname: dmgr
    image: dmgr
    build:
      context: ./dmgr
    ports:
     - "9060:9060"
    tty: true

  custom1:
    hostname: node
    image: node
    build:
      context: ./custom
    ports:
     - "9080:9080"
    environment:
     - PROFILE_NAME=Node
     - HOST_NAME=node
     - NODE_NAME=Node
     - DMGR_HOST=dmgr
     - DMGR_PORT=8879
    depends_on:
     - dmgr

после запуска двух контейнеров второй контейнерный "узел" может разрешить и пропинговать контейнер "dmgr", но другой способ не работает

root@node:/# nslookup dmgr
Server:    127.0.0.11
Address:    127.0.0.11#53
Non-authoritative answer:
Name:   dmgr
Address: 172.18.0.2

root@node:/# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.3  node

root@node:/# cat /etc/resolv.conf 
nameserver 127.0.0.11
options ndots:0

Если я выполняю exec для контейнера "dmgr" и запускаю "nslookup node", его невозможно разрешить. Что я делаю неправильно? пожалуйста, кто-нибудь направит меня в правильном направлении

root@dmgr:/# nslookup node
Server:     127.0.0.11
Address:    127.0.0.11#53

** server can't find node: NXDOMAIN

1 Ответ

0 голосов
/ 09 января 2019

Имя хоста не будет разрешено со встроенным DNS докера (нелогично, но это может быть изменено вне контроля докера, так что есть некоторая логика). Что решит, так это имя контейнера и имя службы custom1. Изменение названия службы решит вашу проблему:

version: '2'
services:
  dmgr:
    hostname: dmgr
    image: dmgr
    build:
      context: ./dmgr
    ports:
     - "9060:9060"
    tty: true

  node:
    image: node
    build:
      context: ./custom
    ports:
     - "9080:9080"
    environment:
     - PROFILE_NAME=Node
     - HOST_NAME=node
     - NODE_NAME=Node
     - DMGR_HOST=dmgr
     - DMGR_PORT=8879
    depends_on:
     - dmgr

Вы также можете определить сетевой псевдоним, если вам нужно разрешить что-то другое:

version: '2'
services:
  dmgr:
    hostname: dmgr
    image: dmgr
    build:
      context: ./dmgr
    ports:
     - "9060:9060"
    tty: true

  custom1:
    image: node
    build:
      context: ./custom
    ports:
     - "9080:9080"
    networks:
      default:
        aliases:
         - node
    environment:
     - PROFILE_NAME=Node
     - HOST_NAME=node
     - NODE_NAME=Node
     - DMGR_HOST=dmgr
     - DMGR_PORT=8879
    depends_on:
     - dmgr

https://docs.docker.com/compose/compose-file/#aliases

...