简体   繁体   English

docker容器网络无法按预期工作

[英]docker container networking not working as expected

I created two docker images and started them using docker compose. 我创建了两个docker映像,并使用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

after the two containers start, second container "node" is able to resolve and ping container "dmgr" but other way is not working 在两个容器启动之后,第二个容器“节点”能够解析并ping容器“ 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

If I exec to container "dmgr" and run "nslookup node", its not able to resolve. 如果我执行到容器“ dmgr”并运行“ nslookup节点”,则无法解析。 what am I doing wrong? 我究竟做错了什么? please someone point me in correct direction 请有人指出我正确的方向

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

** server can't find node: NXDOMAIN

Hostname will not resolve with docker's embedded DNS (counterintuitive, but this can be changed outside of the control of docker, so there's some logic). 主机名将无法使用Docker的嵌入式DNS进行解析(这是违反直觉的,但是可以在Docker的控制范围之外更改它,因此有一些逻辑)。 What will resolve is the container name and the service name, custom1. 解决的是容器名称和服务名称custom1。 Changing the service name would solve your issue: 更改服务名称将解决您的问题:

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

You can also define a network alias if you need to resolve something different: 如果需要解决其他问题,也可以定义网络别名:

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 https://docs.docker.com/compose/compose-file/#aliases

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM