首页 文章

traefik配置docker文件

提问于
浏览
3

今天,我对traefik有一个问题 .

我正在尝试使用traefik作为反向代理 . 在我的网络中,我在docker(有swarm)和其他一些服务器/ VM中有一些容器 .

因此,我想将一些子域重定向到容器,而将其他一些子域重定向到服务器 .

所以目前,我已经完成了一些测试,我可以重定向到服务器或docker容器,但不能同时重定向到两个 .

以下配置在“文件”模式下工作,如果我对所有“文件”部分进行注释,则它在docker模式下工作 .

那么,如何做到这一点?这只是一个配置问题吗?或者traefik无法处理(似乎很奇怪,因为traefik ui在标签模式下显示“文件”/“docker”)?

我正在使用泊坞窗图片:traefik:1.7-rc1

使用此配置为traefik(traefik.toml):

debug = false

logLevel = "DEBUG"
defaultEntryPoints = ["https","http"]
insecureSkipVerify = true
sendAnonymousUsage = true

[api]

[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
  [entryPoints.https.tls]


[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "site.com"
watch = true
swarmMode = true

[file]
  [backends]
    [backends.nas]
      [backends.nas.LoadBalancer]
      method = "drr"
      [backends.nas.servers.server1]
      url = "https://192.168.1.38"
      weight = 1
    [backends.teapot]
      [backends.teapot.LoadBalancer]
      method = "drr"
      [backends.teapot.servers.server1]
      url = "https://192.168.1.40"
      weight = 1
    [backends.gitserver]
      [backends.gitserver.LoadBalancer]
      method = "drr"
      [backends.gitserver.servers.server1]
      url = "https://192.168.1.60"
      weight = 1


  [frontends]
    [frontends.nas]
    backend = "nas"
    passHostHeader = true
      [frontends.nas.routes.test]
      rule = "Host: nas.site.com"
    [frontends.teapot]
    backend = "teapot"
    passHostHeader = true
      [frontends.teapot.routes.test]
      rule = "Host: teapot.site.com"
    [frontends.tpt]
    backend = "teapot"
    passHostHeader = true
      [frontends.tpt.routes.test]
      rule = "Host: tpt.site.com"
    [frontends.gitserver]
    backend = "gitserver"
    passHostHeader = true
      [frontends.gitserver.routes.test]
      rule = "Host: gitserver.site.com"

[acme]
email = "email@site.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"

这是我对traefik的撰写:

version: '3'

services:
  reverse-proxy:
    image: traefik:1.7 # The official Traefik docker image
    ports:
      - "80:80"     # The HTTP port
      - "8080:8080" # The Web UI (enabled by --api)
      - 443:443
    networks:
      - web
    deploy:
      labels:
        - "traefik.enable=false"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
      - /mnt/hgfs/docker/traefik/config/traefik.toml:/traefik.toml
      - /mnt/hgfs/docker/traefik/config/acme.json:/acme.json:rw

networks:
  web:
    external: true

在这里,我的服务样本组成:

version: '3'

services:
  tautulli:
    image: tautulli/tautulli:latest
    environment:
      UID: 1000
      GID: 1000
      TZ: Europe/Paris
    networks:
      - web
      - default
    deploy:
      labels:
        - "traefik.frontend.rule=Host:tautulli.site.com"
        - "traefik.docker.network=web"
        - "traefik.enable=true"
        - "traefik.port=8181"
        - "traefik.protocol=http"
    ports:
      - "8181:8181"
    volumes:
      - /mnt/hgfs/docker/tautulli/config:/config
      - /mnt/hgfs/docker/tautulli/logs:/logs
networks:
  web:
    external: true

另外,我还有一些跟traefik一样的问题,就像在traefik容器之后创建的容器一样,没有链接,即使是 watch = true ,与文件一样,但我会逐个解决问题 .

谢谢你的回答 .

编辑:

经过与traefik支持的一些讨论后,我理解:

  • ws / wss入口点没用

  • 使用命令参数,或toml,而不是两者

  • 标签需要在服务配置中部署

1 回答

  • 0

    好的,最后我找到了解决方案 .

    事实上,我在windows上使用vmware,使用linux Vm,acme.json的权限总是777,所以traefik不喜欢它,并且跳过let加密支持 .

    但是,这也有一些副作用,比如仅考虑其中一个配置(文件或泊坞窗) .

    最后,要解决这个问题:

    删除与acme.json的绑定

相关问题