首页 > 解决方案 > Docker 容器的 Traefik 代理产生 404 未找到所有子域

问题描述

我正在尝试设置一组在单个 ubuntu 服务器上运行的容器化应用程序。我希望每个都在自己的子域上运行,并使用 Traefik 将请求代理到基于域的每个容器。我的 SSL 证书是涵盖域和所有子域的通配符证书。我的问题是,当我导航到我认为应该是正确的子域时,我无法看到这些应用程序。

这是主要 Traefik 容器的 toml 配置(从 docker hub 拉,顺便说一句):

defaultEntryPoints = ["http", "https"]

[entryPoints]

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

[entryPoints.https]
address = ":443"

[entryPoints.https.tls]

[acme]
email = "myemail@gmail.com"
storage = "/acme.json"
entryPoint = "https"
OnHostRule = false

[[acme.domains]]
  main = "*.mydomain.com"
  sans = ["mydomain.com"]

[acme.dnsChallenge]
  provider = "digitalocean"
  delayBeforeCheck = 0

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

Traefik 容器的 docker-compose.yml :

version: '3'
services:
  traefik:
    image: traefik:v1.7.9
    #command: --docker
    ports:
      - "80:80"
      - "443:443"
    restart: always
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "./traefik.toml:/traefik.toml"
      - "./acme.json:/acme.json"
    environment:
      - DO_AUTH_TOKEN
    networks:
      - default

这是我试图从子域中运行的应用程序之一的 docker-compose.yml 和 Dockerfile 文件之一的示例:

码头工人-compose.yml

version: '3'
services:
  servicename:
    build: .
    labels:
      - "traefik.enabled=true"
      - "traefik.backend=servicename"
      - "traefik.frontend.rule=Host:servicename.domain.com"
      - "traefik.docker.network=traefik_default"
      - "traefik.port=8001"
    restart: always
    networks:
      - traefik_default
networks:
  traefik_default:
    external:
      name: traefik_default

Dockerfile

# pull official base image
FROM ruby:2.0.0

# Copy project
COPY . .

# install dependencies
RUN bundle install

EXPOSE 8001/tcp

CMD ["bundle", "exec", "rackup", "--host", "0.0.0.0", "-p", "8001"]

容器化的应用程序在 Traefik 上运行良好,但我还无法将其连接起来。有谁知道可能出了什么问题?

标签: dockertraefik

解决方案


推荐阅读