Docker Swarm + Traefik + Ошибка шлюза Moodle - PullRequest
0 голосов
/ 14 июля 2020

Возникли серьезные проблемы с работой моей установки Mudle за контейнером traefik в docker swarm. Независимо от того, что я пытаюсь, я получаю плохую ошибку шлюза (разные хосты в правиле внешнего интерфейса). Я читал различные сообщения о переполнении стека и учебные пособия, но из-за количества доступных команд и различных опций у меня кружилась голова. Может ли кто-нибудь указать мне правильное направление?

version: '3.7'
services:

  traefik:
    image: traefik:v1.6.2
    networks:
      - traefik-proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/traefik/traefik.toml:/etc/traefik/traefik.toml
    labels:
      - traefik.docker.network=traefik-proxy
      - traefik.http.routers.traefik-http.entrypoints=web
      - traefik.port=8080
      - traefik.enable=true
    ports:
      - "80:80"
      - "8080:8080"
    command: --api

 mariadb:
    image: bitnami/mariadb:latest
    environment:
     - MARIADB_USER=bn_moodle
     - MARIADB_DATABASE=bitnami_moodle
     - MARIADB_PASSWORD=bitnami
     - ALLOW_EMPTY_PASSWORD=yes
    volumes:
     - /var/mariadb_data:/bitnami
    networks:
     - database
     - traefik-proxy
    ports:
     - "3306:3306"

  moodle:
    image: bitnami/moodle:latest
    environment:
     - MOODLE_DATABASE_USER=bn_moodle
     - MOODLE_DATABASE_NAME=bitnami_moodle
     - MOODLE_DATABASE_PASSWORD=bitnami
     - ALLOW_EMPTY_PASSWORD=yes
    ports:
     - 8000:80
    volumes:
     - /var/moodle_data:/bitnami
    depends_on:
     - mariadb
    networks:
     - database
     - traefik-proxy
    labels:
     - traefik.enable=true
     - traefik.http.routers.moodle.entrypoints=web
     - traefik.port=80
     - traefik.frontend.rule=Host:one.test.com
     - traefik.docker.network=traefik-proxy
     - traefik.backend=moodle.app

networks:
  database:
    driver: overlay
  traefik-proxy:
    external: true

volumes:
  mariadb_data:
  moodle_data:

1 Ответ

0 голосов
/ 14 июля 2020

Необходимо обновить как минимум следующее:

  1. moodle использует порт 8080, а не 80. Значит, это может быть причина. Для сервисов mariadb и traefik нужно указать
  2. traefik.enable=false, так как нет смысла отправлять на них трафик c
  3. mariadb должен иметь только database сеть - означает изоляцию от traefik
  4. сделать traefik более поддерживающим с command: --providers.docker --api --api.insecure=true --providers.docker.watch true

Вот конфигурация для Docker Compose который использует traefik:v2.0.

version: '3.7'

services:
  traefik:
    image: traefik:v2.0
    networks:
      - traefik-proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    labels:
      - "traefik.enable=false"
    ports:
      - "80:80"
      - "8080:8080"
    command: --providers.docker --api --api.insecure=true --providers.docker.watch true

  mariadb:
    image: bitnami/mariadb:latest
    labels:
      - "traefik.enable=false"
    environment:
     - MARIADB_USER=bn_moodle
     - MARIADB_DATABASE=bitnami_moodle
     - MARIADB_PASSWORD=bitnami
     - ALLOW_EMPTY_PASSWORD=yes
    networks:
     - database

  moodle:
    image: bitnami/moodle:latest
    environment:
     - MOODLE_DATABASE_USER=bn_moodle
     - MOODLE_DATABASE_NAME=bitnami_moodle
     - MOODLE_DATABASE_PASSWORD=bitnami
     - ALLOW_EMPTY_PASSWORD=yes
    ports:
     - 8000:8080
    depends_on:
     - mariadb
    networks:
     - database
     - traefik-proxy
    labels:
     - "traefik.enable=true"
     - "traefik.http.services.moodle.loadbalancer.server.port=8080"
     - "traefik.http.routers.moodle.rule=HostRegexp(`{catchall:.*}`)"
     - "traefik.docker.network=traefik-proxy"

networks:
  database:
    driver: bridge
  traefik-proxy:
    external: true

Выполнить

docker-compose up -d
docker-compose logs -f

, и когда в журнале отображаются строки вроде

moodle_1   | moodle 11:05:41.68 INFO  ==> Running Moodle install script
moodle_1   | moodle 11:08:14.90 INFO  ==> Persisting Moodle installation
moodle_1   | moodle 11:08:21.75 INFO  ==> ** Moodle setup finished! **
moodle_1   | 
moodle_1   | moodle 11:08:21.77 INFO  ==> ** Starting cron **
moodle_1   | moodle 11:08:21.80 INFO  ==> ** Starting Apache **

попробуйте открыть http://localhost.

BTW, http://localhost: 8080 откроет панель управления Traefik. Полезно посмотреть, чем и как управляют.

...