无法从主机按名称ping docker容器

时间:2020-08-01 11:38:23

标签: docker docker-swarm

我的服务器上有很多容器,我需要按名称(不是IP)访问所有容器。 当然,我可以按IP地址ping容器。 问题是我无法按主机名或名称对它们进行ping操作。

另外,我不使用docker-compose。我使用docker文件和docker restapi

1 个答案:

答案 0 :(得分:3)

选项A:运行DNS代理服务器容器

这是一个DNS proxy server项目,可以执行以下操作:https://github.com/mageddo/dns-proxy-server

首先,您需要启动DNS代理服务器:

docker run --rm --hostname dns.mageddo -v /var/run/docker.sock:/var/run/docker.sock -v /etc/resolv.conf:/etc/resolv.conf defreitas/dns-proxy-server

然后,运行一个虚拟容器并为其分配一个--hostname以进行测试:

docker run -d --hostname=this-can-be-resolved-from-host nginx

最后,尝试从主机上解析/ ping /卷曲在上一步中分配给nginx容器的名称:

neo@neo-desktop:~$ nslookup this-can-be-resolved-from-host
Server:     172.17.0.4
Address:    172.17.0.4#53

Non-authoritative answer:
Name:   this-can-be-resolved-from-host
Address: 172.17.0.3
Name:   this-can-be-resolved-from-host
Address: 172.17.0.3

neo@neo-desktop:~$ ping this-can-be-resolved-from-host
PING this-can-be-resolved-from-host (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3 (172.17.0.3): icmp_seq=1 ttl=64 time=0.032 ms
neo@neo-desktop:~$ curl this-can-be-resolved-from-host
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
[...]



选项B:运行注射器,将容器名称直接添加到Docker主机上的hosts文件中:
(由OP @Tokyo Developer找到的解决方案)

这是一个简单的“ etc / hosts”文件注入工具:https://github.com/dvddarias/docker-hoster

运行进样器容器:

docker run -d \
    -v /var/run/docker.sock:/tmp/docker.sock \
    -v /etc/hosts:/tmp/hosts \
    dvdarias/docker-hoster

运行一个虚拟容器并为其分配一个--hostname以进行测试:

docker run -d --hostname=this-can-be-resolved-from-host nginx

尝试从主机上解析上一步中分配给nginx容器的hostname AND container name

nslookup this-can-be-resolved-from-host
Server:     127.0.0.53
Address:    127.0.0.53#53

Non-authoritative answer:
Name:   this-can-be-resolved-from-host
Address: 172.17.0.3
nslookup keen_lamarr
Server:     127.0.0.53
Address:    127.0.0.53#53

Non-authoritative answer:
Name:   keen_lamarr
Address: 172.17.0.3
相关问题