Контекст
Я планировал упростить некоторые настройки разработки нескольких 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
на мой локальный компьютер, я не могу понять, как предоставить им такой доступ. Может быть, я поступаю неправильно - я открыт для предложений.