我正在运行一台服务器,我通过 cloudflare 将我的域名指向我的服务器 IP,并通过 LetsEncrypt 为我的域名提供了签名的 SSL 证书。我的服务器正在运行 apache Web 服务器,使用 porto 443 进行 ssl 流量。 我安装了 docker 并运行了几个容器。我的目标是使用端口 443 启动并运行 traefik,并通过它路由所有 Docker 流量。这可能吗?
我在这里使用了这个:https://www.linuxserver.io/2018/02/03/using-traefik-as-a-reverse-proxy-with-docker/来编写我的traefik.toml文件和我的docker -撰写文件。
但是,每当我启动 docker-compose 时,除了 traefik 之外的所有服务都会启动。 我收到以下错误:
ERROR: for traefik Cannot start service traefik: driver failed programming external connectivity on endpoint traefik (2d10b64b47e62e7dcb5f94265529fb647e4ba62dbeeb43c201ea02d39f60b381): Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use 错误:启动项目时遇到错误。
我想知道原因是否是我的域已经使用了 443 端口?! 我该如何解决这个问题?
感谢您的帮助!
您正在 Linux 中使用 docker:
其中一些命令应该让您知道您正在使用它们:
sudo lsof -i -P -n | grep LISTEN
netstat -tulpn | grep LISTEN
示例:
docker-pr 2405 根 4u IPv6 28930 0t0 TCP *:443(听)
如果 443 被 docker 占用...这意味着除了 Traefik 之外,您在某些 YML 中还有一个暴露的端口 443(如果是其他应用程序则继续更改端口或关闭它 [pkill])
您可以尝试将YML的“服务”分离到不同的YML中,然后将它们一一打开,以便找到导致您冲突的镜像 (如果将它们分开,请记住创建适当的外部“网络”。)
(顺便说一句......我建议第一个开始的图像是 traefik 的图像)
(您还可以复制并粘贴 YML 文件以获得更好的帮助。)
编辑
RewriteEngine on
RewriteCond %{HTTPS} off
# RewriteCond %{SERVER_PORT} ^9000$
RewriteRule ^(.*)$ https://%{HTTP_HOST}:9443%{REQUEST_URI}
toml config traefik 中的 edit2:(我不知道什么有效,尝试一下)
# Entrypoints, http and https
[entryPoints]
# http should be redirected to https
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
# https is the default
[entryPoints.https]
address = ":9443"
[entryPoints.https.tls]
我想到的另一个解决方案是让你的主 apache 作为代理隧道,但是,那么你不需要带 traefik :P