docker - 如何在 docker-compose 文件中引用 traefik v2 的自签名 SSL 证书?
问题描述
在 docker-compose YAML 文件中引用 Træfik v2 的自签名证书的文档非常有限。以下是Let's Encrypt 的方法:
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 文件中为 Træfik v2 启用 HTTPS:
我确实在此页面上看到了这一点:https ://docs.traefik.io/https/tls/#user-defined
tls:
certificates:
- certFile: /path/to/domain.cert
keyFile: /path/to/domain.key
但它是用于文件 YAML 配置文件,我需要将其转换为等效的 docker-compose YAML 文件,因为它高于他们为 Let's Encrypt 所做的工作。
解决方案
目前看来这是不可行的。有人在Træfik 社区论坛上发布了一个非常相似的问题。
如果 Træfik 通过安全 TCP 端点而不是文件套接字(这不是您想要的)侦听 Docker 事件,您作为标志传递的证书(providers.docker.tls.cert 和 providers.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
- --providers.file.watch=true
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
推荐阅读
- ruby - 如何在 ruby 循环中停止在特定范围内
- r - 基于满足条件的行数子集数据框
- node.js - 无法使用 Multer、React、Node.js、Sequelize、PostgreSQL 访问上传的照片
- amazon-web-services - Amazon S3 文件共享
- python - Pandas,Python - 将 xlsx 转换为 csv 的问题
- javascript - 如何摆脱 React 选择导入错误?
- solidity - solidity ERC20 transferFrom 没有给出错误但不执行
- loops - 单行循环内出现错误“'int' object is not iterable”
- search - 如何在 Magento 2.4 中按产品名称获取目录搜索结果?
- encryption - 在 AES-128 中,get 请求参数的密文是否可以包含 16 的非整数倍数的字节数?