【问题标题】:Certificate not automatically created - Docker-Compose, Traefik, Let's Encrypt,证书未自动创建 - Docker-Compose、Traefik、Let's Encrypt、
【发布时间】:2018-03-19 13:40:05
【问题描述】:

我已经设置了我的第一个 home-docker-stack:

  1. DDNS 帐号 --> 没有机会获得子域 --> 使用端口。
  2. 配置一个 https-proxy,这样每个容器就不需要 https-configuration --> 使用 traefik。

现在我有一个 traefik.toml,内容如下:

defaultEntryPoints = ["http", "https"]
logLevel = "DEBUG"
debug = true

[web]
address = ":8080"

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

[acme]
email = "MY_EMAIL_ADDRESS"
storage = "/etc/traefik/acme/acme.json"
entryPoint = "https"
onDemand = true
OnHostRule = false

[acme.httpChallenge]
entryPoint = "http"

[docker]
domain = "MY_DOMAIN"
watch = true

还有一个 docker-compose.yml,如下所示:

version: '3.4'

services:

  db:
    image: mariadb:10.1
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=SOMEPASSWORD
    env_file:
      - db.env

  wordpress:
    image: wordpress:apache
    restart: always
    ports:
      - "8001:80"
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_PASSWORD=SOMEPASSWORD
      - WORDPRESS_DB_NAME=wordpress
    depends_on:
      - db
    networks:
      - default
      - traefik-net
    deploy:
      replicas: 1
      labels:
        - "traefik.enable=true"
        - "traefik.port=8001"
        - "traefik.docker.network=traefik-net"

  traefik:
    image: traefik:1.5-alpine
    restart: always
    networks:
      - traefik-net
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /home/traefik/traefik.toml:/etc/traefik/traefik.toml:ro
      - /home/traefik/acme:/etc/traefik/acme
    privileged: true
    container_name: traefik

volumes:
  db:

networks:
  traefik-net:

如果我现在尝试按如下方式访问我的 traefik 实例:

https://MY_DOMAIN/

客户端返回(不受信任的自签名证书):

Dem Zertifikat wird nicht vertraut, weil es vom Aussteller selbst signiert wurde.

traefik 日志包含:

traefik      | time="2018-03-19T13:29:29Z" level=debug msg="Looking for provided certificate to validate MY_DOMAIN..." 
traefik      | time="2018-03-19T13:29:29Z" level=debug msg="No provided certificate found for domains MY_DOMAIN, get ACME certificate." 
traefik      | time="2018-03-19T13:29:29Z" level=debug msg="Looking for an existing ACME challenge for MY_DOMAIN..." 
traefik      | time="2018-03-19T13:29:29Z" level=debug msg="http2: server: error reading preface from client 80.129.18.33:44700: remote error: tls: unknown certificate authority" 

为什么无法开始生成证书?我需要解决什么问题?

【问题讨论】:

标签: docker docker-compose lets-encrypt traefik


【解决方案1】:

Traefik 将通过 docker 网络访问您的容器,在 docker 网络中,您在 docker-compose 文件中的 ports 映射中设置的端口没有任何意义。 ports 只是将容器端口映射到主机端口之一。

所以你应该告诉 traefik 使用的端口(通过标签)是80,网络服务器监听的端口。而且你可以删除端口映射,因为这只是对主机的,如果 Traefik 为 http 打开端口,它会将请求路由到你的容器(通过暴露的端口,应该是 80)。

只要您的容器在网络中,exposed 端口就可用于网络中的所有其他容器。


另一个说明:

您在使用 3.x 版本的 docker-compose 文件中。所有 3.x 版本都是 swarm 特定的,因此对于非 swarm 文件,请坚持使用 2.x。

【讨论】:

    猜你喜欢
    • 2020-01-06
    • 2020-09-25
    • 2018-07-02
    • 2017-12-13
    • 2022-06-13
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多