如何修复 Docker 服务的 Traefik Gateway Timeout
问题
如果你使用 Docker 提供程序设置了 Traefik 实例,你经常会遇到一个问题,即每个在 Docker 或 docker-compose 上运行的服务将返回
gateway_timeout_response.txt
Gateway Timeout(HTTP 响应 504)在几秒后。
为什么会出现网关超时?
此问题是由 Traefik 实例与运行服务的容器不在同一 Docker 网络上引起的。 因此,traefik 容器的 IP 地址被防火墙阻止访问 docker 容器的 IP 地址。
有两种方法可以修复此问题。
首选解决方案:使用主机网络
主机能够访问所有 docker 容器 IP 地址。因此,我们可以使用 network_mode: "host" 操作 traefik 容器,这样它不会在单独的网络中接收单独的 IP 地址,而是直接使用主机的 IP 地址和端口。
为了在基于 docker-compose 的设置中启用主机网络,使用
docker_compose_traefik.yml
network_mode: "host"例如:
docker_compose_example.yml
services:
traefik:
image: "traefik:v2.4.8"
network_mode: "host"
# [...]使用主机网络的方法还有增加 traefik 吞吐量的额外优势,因为你不需要任何 docker 端口转发,但主机端口(如 HTTP 的端口 80 和 HTTPS 的端口 443)直接连接到 traefik。
替代解决方案:将 traefik 添加到每个 docker 网络
你也可以将 traefik 实例添加到每个有服务容器的 docker 网络。这会工作,但你需要记住将 traefik 实例添加到每个 docker 容器。由于这不仅通常是大量工作(特别是如果你在设置中运行许多具有单独网络的服务)
Check out similar posts by category:
Traefik
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow