Вопрос или проблема
поскольку у меня возникают трудности с перенаправлением реального IP на docker-приложения, я теперь запускаю docker traefik в режиме хост-сети.
traefik и сервисы работают. Вот моя конфигурация:
docker-compose.yaml:
---
services:
traefik:
image: traefik:latest
container_name: traefik
network_mode: host
volumes:
- ./traefik.yaml:/traefik.yaml
- ./letsencrypt/:/letsencrypt/
- /run/docker.sock:/var/run/docker.sock:ro
labels:
- traefik.enable=true
- traefik.http.routers.traefik.rule=Host(`frontal.cestpasla.norhere.net`)
- traefik.http.routers.traefik.entrypoints=websecure
- traefik.http.routers.traefik.service=api@internal
- traefik.http.services.traefik-0000traefik.loadbalancer.server.port=8080
- traefik.http.routers.traefik.tls.certresolver=myresolver
- traefik.http.routers.traefik.middlewares=traefik-auth
- traefik.http.middlewares.traefik-auth.basicauth.users=me:encryptedpassword
Статический yaml файл traefik:
---
api:
dashboard:
providers:
docker:
exposedByDefault: false
entrypoints:
web:
address: 10.20.0.2:80
websecure:
address: 10.20.0.2:443
certificatesresolvers:
myresolver:
acme:
tlschallenge: true
email: [email protected]
storage: /letsencrypt/acme.json
#log:
# level: DEBUG
Проблемная строка:
- traefik.http.services.traefik-0000traefik.loadbalancer.server.port=8080
Имя сервиса панели управления traefik-0000traefik
, вероятно, потому что файл docker-compose находится в папке с именем 0000.traefik
. Я не помню, на каком этапе моих тестов мне вдруг пришлось добавить эту строку, но на данный момент, в сетевом режиме хоста, если я не использую эту строку, в логах docker я вижу следующую ошибку:
2025-03-12T11:25:38Z ERR error="service \"traefik-0000traefik\" error: port is missing" container=traefik-0000traefik-09ccfe569180f81f22b135fd75082ed017ce95a7dc0ade1ab5a7e2bfbd960886 providerName=docker
Вопрос:
Если мне нужно использовать строку конфигурации для сервиса панели управления, могу ли я хотя бы выбрать имя сервиса, например, traefik_dashboard
или что-то подобное? И как?
Ответ или решение
Для успешной настройки сервиса Traefik Dashboard и изменения его имени, требуется понимание нескольких ключевых аспектов работы Traefik, особенно в контексте использования Docker и network_mode: host. Ваше текущее решение вызывает некоторые проблемы с перенаправлением реальных IP-адресов к приложениям Docker, но в целом Traefik и сервисы работают, как указано в вашей конфигурации.
Теория
Traefik – это современный, высокопроизводительный реверс-прокси и балансировщик нагрузки, предназначенный для упрощения развертывания и работы веб-сервисов. Он легко интегрируется с Docker, Kubernetes и многими другими технологиями. Один из его ключевых компонентов – это Dashboard, который позволяет отслеживать состояние маршрутизации и конфигурацию ваших сервисов.
Когда вы работаете в network_mode: host, Traefik напрямую взаимодействует с сетевым стеком хоста, что существенно упрощает настройку прокси. Однако в таком режиме могут возникать сложности с именами сервисов, особенно когда Docker Compose проект находится в папке с необычным именем.
Пример
В вашей конфигурации определено, что Dashoard по умолчанию связано с внутренним API Traefik с именем сервиса traefik-0000traefik
, вероятнее всего это связано с путем к проекту, который в вашем случае содержит 0000.traefik
. Это повлияло на автоматическую генерацию имени сервиса в Docker. Кроме того, вы указали порт для Dashboard через маппинг на 8080
, что является стандартным для Traefik Dashboard.
Ваша проблема связана с ошибкой:
service "traefik-0000traefik" error: port is missing
Эта ошибка возникает, если Traefik не может определить на какой порт направить запросы к Dashboard.
Применение
Чтобы решить проблему и изменить имя сервиса Dashboard, вы можете сделать следующее:
-
Переименовать папку проекта или внести изменения в Docker Compose: Если имя папки содержит специфические символы или форматы (как
0000.traefik
), это может повлиять на образуемые имена ресурсов. Назовите папку более нейтрально, например,traefik_project
. -
Использование Labels: Укажите кастомное имя сервиса через лейблы. Вот пример того, как можно настроить это в
docker-compose.yaml
:
labels:
- traefik.enable=true
- traefik.http.routers.traefik-dashboard.rule=Host(`frontal.cestpasla.norhere.net`)
- traefik.http.routers.traefik-dashboard.entrypoints=websecure
- traefik.http.routers.traefik-dashboard.service=api@internal
- traefik.http.services.traefik_dashboard.loadbalancer.server.port=8080
- traefik.http.routers.traefik-dashboard.tls.certresolver=myresolver
- traefik.http.routers.traefik-dashboard.middlewares=traefik-auth
Обратите внимание, что traefik_dashboard
используется вместо traefik-0000traefik
.
-
Проверка конфигурации Traefik: Убедитесь, что в вашем
traefik.yaml
все настройки соответствуют требованиям, и нет конфликтующих записей. -
Рестарт сервисов: После внесения изменений, обязательно пересоздайте контейнеры, чтобы новые настройки вступили в силу:
docker-compose down
docker-compose up -d
- Проверка логов и статуса: Используйте
docker logs
и проверку статуса контейнера для выявления возможных проблем после внесения изменений.
Эти шаги помогут вам кастомизировать имя сервиса Dashboard и решить текущую проблему в конфигурации. Это важно для правильного ориентирования в логах и удобства администрирования.