Невозможно получить доступ к виртуальным хостам между контейнерами с помощью docker-compose, используя nginx-proxy и dnsmasq - PullRequest
0 голосов
/ 28 августа 2018

Контекст

Я планировал упростить некоторые настройки разработки нескольких docker-compose.yml путем локального введения виртуальных хостов. Я оглянулся и решил использовать nginx-proxy для обратного прокси-сервера (возможность установить VIRTUAL_HOST для каждой службы).

Настройка

Чтобы выставить их на хост-машине, я пошел по маршруту dnsmasq и добавил /etc/resolver/test/ с nameserver 127.0.0.1.

Я отправил приведенное выше в действие, используя файл dev/docker-compose.yml:

version: '3.5'

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    restart: 'always'
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/tmp/docker.sock:ro"

  dnsmasq:
    image: andyshinn/dnsmasq
    restart: 'always'
    ports:
      - "53:53/tcp"
      - "53:53/udp"
    cap_add:
      - NET_ADMIN
    command: --log-facility=-
    volumes:
      - ./data/dnsmasq.conf:/etc/dnsmasq.conf
      - ./data/dnsmasq.d:/etc/dnsmasq.d

networks:
  default:
    external:
      name: proxynet

Файл data/dnsmasq.conf содержит только address=/test/127.0.0.1.

Я также создал внешнюю сеть proxynet и использую ее в качестве сети по умолчанию для файла (ов) docker-compose (docker network create proxynet). Это затем позволяет другим файлам и сервисам, которые создаются в docker, связываться с прокси.

У меня есть следующее proj1/docker-compose.yml:

version: "3.5"

services:
  proj1-web:
    image: jwilder/whoami
    environment:
      - VIRTUAL_HOST=proj1-web.test

networks:
  default:
    external:
      name: proxynet

Работая с обоими этими файлами docker-compose (т.е. docker-compose up), я могу получить доступ к proj1-web.test с моей локальной машины. Все работает как положено.

Теперь я хочу иметь возможность ссылаться на proj1-web.test в другом контейнере и разрешить его преобразование в работающий контейнер.

Я создам proj2/docker-compose.yml (аналогично предыдущему, просто другое имя):

version: "3.5"

services:
  proj2-web:
    image: jwilder/whoami
    environment:
      - VIRTUAL_HOST=proj2-web.test

networks:
  default:
    external:
      name: proxynet

Когда все работает, я могу получить доступ к proj1-web.test и proj2-web.test с моей локальной машины. Я могу успешно свернуть различные службы, используя от proj1 до proj2: docker-compose run proj1-web sh -c "apk update -qq; apk add curl -qq; curl -v proj2-web:8000".

Задача

Проблема в том, что я не могу свернуть имя виртуального хоста proj2-web.test из proj1: docker-compose run proj1-web sh -c "apk update -qq; apk add curl -qq; curl -v proj2-web.test":

* Rebuilt URL to: proj2-web.test/
*   Trying 127.0.0.1...
* TCP_NODELAY set
* connect to 127.0.0.1 port 80 failed: Connection refused
* Failed to connect to proj2-web.test port 80: Connection refused
* Closing connection 0
curl: (7) Failed to connect to proj2-web.test port 80: Connection refused

Есть что-то, что я здесь упускаю? Похоже, что отдельные контейнеры не имеют доступа к DNS, предоставляемой с dnsmasq на мой локальный компьютер, я не могу понять, как предоставить им такой доступ. Может быть, я поступаю неправильно - я открыт для предложений.

...