как docker-compose сопоставляет имена моих сервисов с IP-адресами? - PullRequest
1 голос
/ 14 мая 2019

У меня есть файл docker-compose.yml, который я использую для запуска веб-приложения.

version: '3'
services:
  web:
    entrypoint: gunicorn myapp.wsgi:application --bind 0.0.0.0:7000
    ...
  nginx:
    ports:
      # HOST:CONTAINER
      - 80:80
      - 443:443
    ...

Внутри контейнера моей nginx службы:

$ 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
192.168.144.4   790c0822b887

$ curl http://web:7000

<h1>Bad Request (400)</h1>

$ traceroute web

traceroute to web (192.168.144.3), 30 hops max, 46 byte packets
 1  ec2-user_web_1.ec2-user_default (192.168.144.3)  0.008 ms  0.007 ms  0.006 ms

Так что я могу найти имя веб-хоста, и оно сопоставлено с IP-адресом 192.168.144.3, но я не вижуэто в файле /etc/hosts.

Как docker-compose специально настроил этот контейнер так, чтобы curl знал IP-адрес?

1 Ответ

2 голосов
/ 15 мая 2019

Docker предоставляет службу DNS (поиск «автоматическое разрешение DNS между контейнерами»), а Docker Compose предоставляет «определенную пользователем» сеть по умолчанию, которая использует ее .Если вы посмотрите на /etc/resolv.conf внутри вашего контейнера, он должен указать на частные IP-адреса Docker, которые обеспечивают разрешение имени хоста как для общего Интернета, так и для других контейнеров.

Более конкретно в контексте Docker Compose,имя каждой записи в блоке services: разрешается как имя хоста другими контейнерами, запущенными из того же файла docker-compose.yml.Вам не нужно устанавливать container_name:, hostname:, links: или networks:;все это настроено автоматически для вас.

...