Я установил 2 контейнера Docker a и b , которые оба предоставляют службы HTTP. Они должны иметь открытый доступ через имена своих виртуальных хостов a.domain.com и b.domain.com . Кроме того, a должен иметь доступ к b на своем общедоступном имени виртуального хоста, то есть он должен иметь доступ к b на b.domain.com .
Настройка двух контейнеров выполняется с помощью файла docker-compose v2
version: '2'
services:
a:
container_name: container-a
build:
context: ../
dockerfile: Containers/A.Dockerfile
ports:
- 5001:80
environment:
VIRTUAL_HOST: a.domain.com
depends_on:
- b
networks:
- my-net
b:
container_name: container-b
build:
context: ../
dockerfile: Containers/B.Dockerfile
ports:
- 5000:80
environment:
VIRTUAL_HOST: b.domain.com
networks:
- my-net
networks:
my-net:
driver: bridge
Я установил контейнер док-станции jwilder / nginx-proxy для автоматического создания конфигураций обратного прокси-сервера nginx. Мои два контейнера a и b подключены через свою пользовательскую мостовую сеть, но также подключены к мостовой сети по умолчанию, на которой работает прокси-сервер nginx (docker network connect bridge container-(a|b)
)
Конфигурация nginx, сгенерированная прокси-сервером nginx, выглядит вполне нормально.
upstream a.domain.com {
# a
server 172.17.0.14:80;
}
server {
server_name a.domain.com;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
location / {
proxy_pass http://a.domain.com;
}
}
upstream b.domain.com {
# a
server 172.17.0.15:80;
}
server {
server_name b.domain.com;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
location / {
proxy_pass http://b.domain.com;
}
}
Оба контейнера могут быть доступны с моей клиентской машины через их общедоступные имена виртуальных хостов.
Проблема в том, что мой контейнер A не может получить доступ к контейнеру B на своем имени виртуального хоста b.domain.com. Он может получить к нему доступ через container-b , однако для меня это не вариант.
Есть идеи или намеки на то, что я делаю не так?