Приведу упрощённый пример
version: "3"
services:
authservice:
build: aggregator-auth-service
ports:
- "8080:8080"
depends_on:
- authdb
env_file:
- aggregator-auth-service/.env
networks:
- aggregator-service-network
restart: unless-stopped
shopservice:
build: aggregator-shop-service
depends_on:
- authservice
env_file:
- aggregator-shop-service/.env
ports:
- "8081:8081"
networks:
- aggregator-service-network
restart: unless-stopped
networks:
aggregator-service-network:
driver: bridge
Допустим мы можем обращаться к authservice с использованием поддоменов (заранее не знаем все, т.к. регистрируются в процессе работы). Отправляя запрос от shopservice к authservice (что то типа
example.authservice:8080/auth), ловлю timeout. С постмана подобный запрос проходит (
example.localhost:8080/auth). Видимо dns в windows перенаправляет *.localhost на localhost по дефолту. Как разрешить такое в docker? Если нужен nginx или dnsmasq, то дайте пример, опыта не имел, поэтому подробнее если можно
Из того, что пробовал с nginx:
server {
listen 8080;
server_name ~^(?<subdomain>.+)\.authservice$;
location / {
proxy_pass http://authservice:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
nginx:
image: nginx
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
ports:
- "8080:8080"
networks:
- aggregator-service-network
По dnsmasq вопросы:
dnsmasq:
image: andyshinn/dnsmasq
command: --address=/.authservice/<нужно указывать ip authservice>
cap_add:
- NET_ADMIN
networks:
- aggregator-service-network
restart: always