我如何在docker-compose文件中引用traefik v2的自签名ssl证书

时间:2019-10-28 00:44:24

标签: docker docker-compose ssl-certificate tls1.2 traefik

在docker-compose yaml文件中,用于引用traefik v2的自签名证书的文档非常有限,这是为letscrypt进行加密的方法

https://github.com/containous/blog-posts/blob/master/2019_09_10-101_docker/docker-compose-07.yml#L11-L14

version: "3.3"

services:
  traefik:
    image: "traefik:v2.0.0"
    command:
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - --providers.docker
      - --api
      - --certificatesresolvers.leresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
      - --certificatesresolvers.leresolver.acme.email=your@email.com
      - --certificatesresolvers.leresolver.acme.storage=/acme.json
      - --certificatesresolvers.leresolver.acme.tlschallenge=true

但是我试图检查文档,但是我没有看到任何方法来在没有toml文件的情况下在docker-compose文件中引用自签名证书

我已经尝试过了

version: "3.3"

services:
  traefik:
    image: "traefik:v2.0.0"
    command:
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - --providers.docker
      - --api
      - --providers.docker.tls.cert=/etc/certs/server.crt
      - --providers.docker.tls.key=/etc/certs/server.key

但出现以下错误

  

无法检索Docker客户端和服务器主机的信息:   连接期间出错:获取   https://%2Fvar%2Frun%2Fdocker.sock/v1.24/version:http:服务器提供了   对HTTPS客户端的HTTP响应“ providerName = docker

这里是我使用的资源,这些资源没有提供任何方式来设置自签名证书以在docker-compose yaml文件中为traefik v2启用htttps

https://docs.traefik.io/reference/static-configuration/cli/ https://docs.traefik.io/https/tls/#user-defined

我确实在此页面上看到此https://docs.traefik.io/https/tls/#user-defined

tls:
  certificates:
    - certFile: /path/to/domain.cert
      keyFile: /path/to/domain.key

但是它是用于文件yaml配置文件的,我需要将其转换为等效于docker-compose yaml文件,因为它高于他们为letencrypt所做的工作

1 个答案:

答案 0 :(得分:4)

目前看来这是行不通的。有人在traefik community forum

上发布了一个非常类似的问题

如果traefik通过secure tcp endpoint而非文件套接字监听docker事件,则作为标志传递的证书(providers.docker.tls.cert和provider.docker.tls.key)很有用。不是你想要的。

将所有内容配置在单个docker-compose文件中会很酷,但是不幸的是,自签名相关的配置必须存储在单独的文件中。

以下是记录示例:

docker-compose.yml

traefik:
  image: traefik:v2.1
  command:
    - --entrypoints.web.address=:80
    - --entrypoints.websecure.address=:443
    - --providers.docker=true
    - --providers.file.directory=/etc/traefik/dynamic_conf
  ports:
    - 80:80
    - 443:443
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock:ro
    - ./certs/:/certs/:ro
    - ./traefik.yml:/etc/traefik/dynamic_conf/conf.yml:ro

web:
  image: nginx:1.17.8-alpine
  labels:
    # http with redirection
    - traefik.http.middlewares.redirect-middleware.redirectscheme.scheme=https
    - traefik.http.routers.web-router.entrypoints=web
    - traefik.http.routers.web-router.rule=Host(`your-domain.net`)
    - traefik.http.routers.web-router.middlewares=redirect-middleware
    # https
    - traefik.http.routers.websecure-router.entrypoints=websecure
    - traefik.http.routers.websecure-router.tls=true
    - traefik.http.routers.websecure-router.rule=Host(`your-domain.net`)

traefik.yml

tls:
  certificates:
    - certFile: /certs/awx.afone.priv.crt
      keyFile: /certs/awx.afone.priv.key