[英]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.