Docker-compose traefik PathPrefixStrip无法正常工作

时间:2017-11-04 07:15:58

标签: docker routes docker-compose reverse-proxy traefik

我有一个让我生气的问题,请帮助我。

我想从一个免费的no-ip子域访问我的所有应用程序,所以我认为traefik可以为我做这些,我想访问我的所有应用程序:

 mysubdomain.no-ip.com/emby
 mysubdomain.no-ip.com/pydio
 mysubdomain.no-ip.com/adminer...

这是我的码头撰写:

version: "2"
services:
  db:
    image: linuxserver/mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: "test"
    labels:
      - "traefik.enable=false"
    volumes:
      - ./config/mariadb:/etc/mysql/
    ports:
      - '3306:3306'
  adminer:
    image: adminer
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.backend=adminer"
      - "traefik.frontend.rule=PathPrefixStrip:/dbadmin"
      - "traefik.backend.port=8080"
    volumes:
      - ./config/adminer:/config
  emby:
    image: emby/embyserver:latest
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.backend=emby"
      - "traefik.frontend.rule=PathPrefixStrip:/media"
      - "traefik.backend.port=8096"
    volumes:
      - ./config/emby:/config
  cloud:
    image: linuxserver/pydio:latest
    restart: always
    environment:
      PGID: "1000"
      PUID: "1000"
    labels:
      - "traefik.enable=true"
      - "traefik.backend=cloud"
      - "traefik.frontend.rule=PathPrefixStrip:/cloud"
      - "traefik.backend.port=443"
      - "traefik.protocol=https"
    volumes:
      - ./config/cloud:/config
      - ./data/test:/data
  organizr:
      image: lsiocommunity/organizr
      restart: always
      environment:
        PGID: "1000"
        PUID: "1000"
        TZ: "Europe/Paris"
      labels:
        - "traefik.enable=true"
        - "traefik.backend=organizr"
        - "traefik.frontend.rule=PathPrefixStrip:/"
        - "traefik.backend.port=80"
      volumes:
        - ./config/organizr:/config
        - ./data/organizr:/data
  traefik:
    image: traefik:1.3.3
    command: --web --docker --docker.domain=traefik --logLevel=DEBUG #-c /dev/null --web --docker --logLevel=INFO
    restart: always
    ports:
      - '80:80'
      - '443:443'
      - '8080:8080'
    labels:
      - "traefik.enable=false"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./config/traefik/data:/data
      - ./config/traefik/sslcerts:/ssl

我的traefik.toml

# defaultEntryPoints must be at the top because it should not be in any table below
defaultEntryPoints = ["http", "https"]
InsecureSkipVerify = true

[web]
# Port for the status page
address = ":8080"

# Entrypoints, http and https
[entryPoints]

  # http should be redirected to https
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"

  # https is the default
  [entryPoints.https]
    address = ":443"
    [entryPoints.https.tls]
      [[entryPoints.https.tls.certificates]]
      CertFile = "/ssl/tls.crt"
      KeyFile = "/ssl/tls.key"
[retry]

# Enable ACME (Let's Encrypt): automatic SSL
# [acme]
# # caServer = "https://acme-staging.api.letsencrypt.org/directory"
# email = "test@gmail.com"
# storage = "acme.json" # or "traefik/acme/account" if using KV store
# entryPoint = "https"
# onDemand = false
# OnHostRule = true

[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "localhost"
watch = true
exposedbydefault = false

所以我只有一个应用程序像魅力一样工作:emby。

Adminer semms正常工作,加载css和其他资产,但是当我提交表单时,它会将我发送到localhost / server = db& username = test它应该将我发送到localhost / dbadmin / server = db& username =测试

当我访问localhost / cloud /时,如果我打开Chrome控制台,则会为我加载一个空白页:

pydio.material.min.css Failed to load resource: the server responded with a status of 404 () pydio.boot.min.js Failed to load resource: the server responded with a status of 404 () 
cloud:18 Uncaught ReferenceError: PydioBootstrap is not defined at cloud:18 pydio.material.min.css Failed to load resource: the server responded with a status of 404 ()

实际上它尝试从localhost / plugins加载插件而不是从localhost / cloud / plugins加载... 我在github上看到很多与此相关的问题,但似乎在1.3.3版本中得到纠正,我尝试1.3.3,最新...

pydio和adminer是否需要支持反向代理?

抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

在traefik中,PathPrefixStrip并在入口点do not currently work together中重定向。因此,如果您的请求转到http而不是https,则会收到错误。

my own demo中,我只是在端口80上设置nginx以将重定向作为短期解决方法发送,直到上述问题得到解决。