Порт сервиса в Docker
Порт сервиса говорит прокси, на какой номер внутри контейнера слать запрос, и это не порт компьютера.
Метка traefik.http.services.web.loadbalancer.server.port
со значением 80
подходит для nginx,
который слушает 80
внутри копии.
Сайт наружу порт не публикует.
Правило хоста
Host(`site.localhost`)
остаётся на роутере web,
а номер порта задают отдельной меткой на том же сервисе.
Прокси и web
на nginx
в одном описании:
services:
proxy:
image: traefik:3
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
web:
image: nginx
labels:
- traefik.enable=true
- traefik.http.routers.web.rule=Host(`site.localhost`)
- traefik.http.services.web.loadbalancer.server.port=80
Фоновый подъём проекта:
docker compose up -d
Стартовая страница nginx
открывается по
http://site.localhost.
Строки ports
у web
в файле нет.
Опишите сервис blog на nginx с хостом blog.localhost и внутренним портом 80 в метке балансировщика для роутера blog.
Откройте http://blog.localhost и убедитесь, что видна приветственная страница nginx.