2016-12-02 2 views
0

Я пытаюсь использовать обратный прокси Træfɪk с некоторыми контейнерами докеров.Простая установка прокси-сервера Træfɪk

Вот мой Træfɪk докер-compose.yml:

version: '2' 
services: 
    traefik: 
    image: traefik 
    command: --web --docker --docker.domain=my-domain.net --logLevel=DEBUG 
    ports: 
     - "80:80" 
     - "8080:8080" 
    volumes: 
     - /var/run/docker.sock:/var/run/docker.sock 
     - /dev/null:/traefik.toml 

Вот докер-compose.yml веб-часть моих услугах:

version: '2' 
services: 
    # [...] 
    web: 
    build: . # An nginx based image 
    container_name: my_app_web 
    volumes: 
     - ..:/app/ 
    depends_on: 
     - db 
     - redis 
    labels: 
     - "traefik.backend=my_app" 
     - "traefik.frontend.rule=Host:my-domain.net" 
     - "traefik.port=80" 

Запуск все эти вещи, Я вижу свой интерфейс/бэкэнд, созданный на веб-интерфейсе Træfɪk, но я не могу получить доступ к своему приложению my-domain.net.

$ curl -H Host:my-domain.net http://127.0.0.1 
# ... after ±30s. 
Gateway Timeout 

Træfɪk войти:

экспедиторская Ошибка в http://172.18.0.4:80, эээ: набрать ТСР 172.18.0.4:80: I/O Таймаут

я могу получить доступ к приложению от его локальный IP хотя (172.18.0.4), и он работает нормально.

Я, конечно, забываю что-то здесь, любую помощь?


Дополнительная информация:

  • Официальный emilevauge/whoami работает нормально в отдельном Докер-Compose файл.
  • Моя служба работает нормально без Træfɪk (путем сопоставления порт 80)
+0

Не могли бы вы предоставить файл Docker для своего веб-приложения и полный фрагмент вашего docker-compose.yml? –

+0

Вы используете некоторые из контейнеров в нескольких сетях? то вы также должны добавить метку, в которой сетевой трейфик должен искать контейнер. В противном случае вы также увидите некоторые тайм-ауты шлюза. Пожалуйста, предоставьте полный файл. –

ответ

0

Как предложенному @ AndreasJägle, я осмотрел контейнеры, и он показал мне Traefik и свои услуги в различных сетях.

Я думал, что докеры по умолчанию всегда использовали режим моста, но он больше не выглядит в этом случае с compose networking, начиная с версии 2. Он создает сеть для файла компоновки докеров (на основе имени проекта).

Таким образом, с составлением стартового v2 вам необходимо указать общую сеть с помощью файлов, содержащих докеры, которые должны быть связаны.

Здесь, я просто использовал один сгенерированный для traefik:

version: '2' 
services: 
    # ... 
    web: 
    # ... 
    labels: 
     - "traefik.backend=my_app" 
     - "traefik.frontend.rule=Host:my-domain.net" 
     - "traefik.port=80" 

networks: 
    default: 
    external: 
     name: traefik_default 

Дополнительная информация:

Traefik работает нормально с emilevauge/whoami, потому что определяло файл v1 докер-COMPOSE, так он использовал режим моста.

1

При запуске traefik с грузчиком в качестве внутреннего интерфейса, нет необходимости подвергать порты из вашего web контейнера. Поэтому вы должны быть в безопасности, чтобы удалить раздел ports из службы web в свой файл компоновки.

Вы используете обе службы из одного и того же файла компоновки? Вы должны убедиться, что контейнер traefik имеет доступ к веб-контейнеру. Это работает либо при запуске как из одного файла компоновки, либо путем присоединения двух контейнеров к одной и той же сети.

Другой возможностью тайм-аута может быть ваш веб-контейнер, отображающий более одного порта (посмотрите на свой файл Dockerfile). Если это так, вам нужно явно указать traefik, на какой порт он должен отображать запросы. В вашем случае это должно быть "traefik.port=80".

Поскольку вы используете очень базовую настройку, и вы уже установили домены с помощью меток, нет необходимости предоставлять какую-либо специальную конфигурацию. Пожалуйста, проверьте значение по умолчанию, просто установив /dev/null в виде файла в формате как, например, в very basic docs.

Для службы traefik:

volumes: 
    - /var/run/docker.sock:/var/run/docker.sock 
    - /dev/null:/traefik.toml 

Для вашего веб-сервиса

labels: 
    - "traefik.backend=my_app" 
    - "traefik.frontend.rule=Host:my-domain.net" 
    - "traefik.port=80" 
+0

Спасибо, ваш подробный ответ. Действительно, я обнаружил, что мне не нужно определять сопоставление портов для моей службы. Кроме того, в моем контейнере был выставлен дополнительный порт, и я определил правильный вариант с помощью 'traefik.port'. Вопрос обновлен. Тем не менее, я все еще получаю тайм-аут и ни один журнал, входящий в мой сервис (nginx) –

+0

Я просто попробовал официальный «emilevauge/whoami» крошечный образ в отдельном файле-файле для докеры, он отлично работает. И мой образ отлично работает без Traefik. Я не знаю, как отладить это. –

+1

не могли бы вы предоставить вывод 'docker network ls' и некоторых' docker network inspect 'сетей, которые называются папками, в которых находятся ваши файлы компоновки (например, для сетей с именем mytest_default, если ваша папка называется чем-то вроде моего -контрольная работа). Я предполагаю, что контейнеры не могут достичь друг друга. –

Смежные вопросы