cant ping docker контейнер по имени с хоста - PullRequest
1 голос
/ 01 августа 2020

У меня много контейнеров на моем сервере, мне нужно получить доступ ко всем контейнерам по имени (а не по IP). и, конечно же, я могу пинговать контейнеры по IP-адресу. проблема в том, что я не могу пинговать их по имени хоста или имени.

также, я не использую docker -compose. Я использую docker файл и docker restapi

1 Ответ

1 голос
/ 01 августа 2020

Вариант 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 / curl имя, которое вы назначили контейнеру 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>
[...]


Вариант Б. Запустите инжектор, который добавляет имена контейнеров непосредственно в файл hosts на хосте docker: (решение найдено 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

Попробуйте разрешить hostname AND container name, назначенный контейнеру nginx на предыдущем шаге, с вашего хост-компьютера:

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
...