Docker 的 Traefik 反向代理

Traefik Reverse Proxy with Docker

我有 docker 与 nginx 运行 组成以下配置:

version: "3"

services:
  web:
    image: nginx:alpine
    volumes:
     - ./nginx:/etc/nginx/conf.d/rainloop
    ports:
     - "8081:80"

    labels:
     - "traefik.frontend.rule=Host:www.example.com"
     - "traefik.port=8081"

和 docker 中的 traefik - 使用以下配置组成:

version: '3'

services:
  reverse-proxy:
    image: traefik:alpine 
    command: --api --docker 

    ports:
      - "80:80"     # The HTTP port
      - "8080:8080" # The Web UI (enabled by --api)
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
      - ./traefik.toml:/etc/traefik/traefik.toml

traefik.toml 保持基本状态,看起来像这样

defaultEntryPoints = ["http"]

[entryPoints]
  [entryPoints.http]
  address = ":80"

Web UI 显示如下

调用我的域时 www.example.com 我超时了。

您需要将两个容器放在同一个网络上。

  1. 在您的主机中创建一个 docker 网络。 docker network create {network name}.

  2. 在您的 docker-compose 中,使用您创建的现有网络连接两个容器。您可以阅读 https://docs.docker.com/compose/networking/#use-a-pre-existing-network 了解如何使用它。

  3. 将每个服务添加到上述网络。

在您的 traefik.toml

中添加以下内容
[docker]
endpoint = "unix:///var/run/docker.sock"
watch = true

创建网络 docker network create traefik-net

使用

部署 traefik
version: '3'
services:
  traefik:
    image: traefik:latest
    command: --api
    ports:
      - 80:80
      - 8080:8080 # Port for the web UI
    networks:
      - traefik-net

使用

部署nginx
version: '3'
services:
  frontend:
    image: nginx
    networks:
    - traefik-net
    labels:
    - "traefik.docker.network=traefik-net"
    - "traefik.frontend.rule=Host:${DOMAIN}"
    - "traefik.backend=nginx"
    - "traefik.port=80" # you should use exposed port, not published