如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
一个动态的 docker->redis->traefik 发现代理。
解决了在非 Swarm/Kubernetes 多主机集群中运行单个面向公众的 traefik 实例的问题。
+---------------------+ +---------------------+
| | | |
+---------+ :443 | +---------+ | :8088 | +------------+ |
| WAN |------------->| traefik | | | | svc-nginx | |
+---------+ | +---------+ | | +------------+ |
| | | | | |
| +---------+ | | +-------------+ | |
| | redis |<----------------| traefik-kop | | |
| +---------+ | | +-------------+ | |
| docker1 | | docker2 | |
+---------------------+ +---------------------+
traefik-kop 通过使用与 traefik docker-provider 相同的逻辑来解决此问题。它从本地 docker 节点读取容器标签,并将其发布到指定的 redis 实例。只需为 traefik 节点配置 redis 提供程序,并将其指向同一个实例,如上图所示。
traefik-kop 的自定义 IP 和端口自动检测可通过传递 --skip-replace 标志或设置 SKIP_REPLACE=1 环境变量来禁用。设置后,traefik-kop 将完全依赖 traefik 的原生 IP 和端口检测。其他相关标志(如 --bind-ip 或 --bind-interface)将不起作用。
--skip-replace SKIP_REPLACE=1 traefik-kop --bind-ip --bind-interface
当您的服务使用覆盖网络时(如上文“容器网络”部分所述),此配置效果最佳。
将 traefik 配置为使用 redis 提供程序,例如通过 traefik.yml:
providers:
providersThrottleDuration: 2s
docker:
watch: true
endpoint: unix:///var/run/docker.sock
swarmModeRefreshSeconds: 15s
exposedByDefault: false
redis:
endpoints:
# 假设在与 traefik 相同的 docker 主机上运行着以此服务名链接的 redis
- "redis:6379"
通过 docker-compose 在其他节点上运行 traefik-kop:
services:
traefik-kop:
image: "ghcr.io/jittering/traefik-kop:latest"
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- "REDIS_ADDR=192.168.1.50:6379"
- "BIND_IP=192.168.1.75"
# 或者,从接口获取(需要 network_mode: host)
# - "BIND_INTERFACE=eth0"
然后为目标服务添加常用标签:
services:
nginx:
image: "nginx:alpine"
restart: unless-stopped
ports:
# 主机端口绑定将自动被选为服务端点。更多信息见配置部分的“服务端口绑定”。
- 8088:80
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx.rule=Host(`nginx-on-docker2.example.com`)"
- "traefik.http.routers.nginx.tls=true"
- "traefik.http.routers.nginx.tls.certresolver=default"
# [可选] 显式设置此服务的端口绑定。更多信息见配置部分的“服务端口绑定”。
- "traefik.http.services.nginx.loadbalancer.server.scheme=http"
- "traefik.http.services.nginx.loadbalancer.server.port=8088"
另请参见下文的 IP 绑定 部分。
traefik-kop 能够通过命名空间定位容器。只需为 kop 配置一个命名空间:
services:
traefik-kop:
image: "ghcr.io/jittering/traefik-kop:latest"
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- "REDIS_ADDR=192.168.1.50:6379"
- "BIND_IP=192.168.1.75"
- "NAMESPACE=staging"
然后将 kop.namespace 标签添加到目标服务,以及常规的 traefik 标签:
services:
nginx:
image: "nginx:alpine"
restart: unless-stopped
ports:
- 8088:80
labels:
- "kop.namespace=staging"
- "traefik.enable=true"
- "traefik..."
可以通过逗号分隔值来使用多个命名空间。只要找到容器的其中一个命名空间,Traefik-kop 就会包含该容器。
services:
traefik-kop:
# ...
environment:
# 会暴露具有 'dev' 或 'staging' 命名空间的任何服务
- "NAMESPACE=dev,staging"
services:
nginx:
# ...
labels:
# 会被暴露,因为它具有 'staging' 命名空间
- "kop.namespace=staging,experimental"
另一种实现命名空间的方法是为 traefik 相关标签添加自定义前缀。这对 traefik-kop 而言是一个包含过滤器,对 traefik 而言是一个排除过滤器。当您在同一主机上同时运行 traefik 和 traefik-kop 时,这会非常有用。
services:
nginx:
labels:
- "traefik.enable=true"
- "traefik.http.routers..."
- "traefik..."
变为
services:
traefik-kop:
image: "ghcr.io/jittering/traefik-kop:latest"
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- "REDIS_ADDR=192.168.1.50:6379"
- "BIND_IP=192.168.1.75"
- "DOCKER_PREFIX=kop.public"
nginx:
labels:
- "kop.public.traefik.enable=true"
- "kop.public.traefik.http.routers..."
- "kop.public.traefik..."
配置Sentinel时,--redis-addr标志将被忽略。必须同时提供--redis-sentinel-addrs和--redis-sentinel-master。--redis-user、--redis-pass和--redis-db标志仍然适用,用于通过Sentinel发现的Redis主节点进行身份验证。
要发布新版本,只需向GitHub推送新标签。
git push
git tag -a v0.11.0
git push --tags
更新变更日志:
make update-changelog
# 或(替换下方标签)
docker run -it --rm -v "$(pwd)":/usr/local/src/your-app \
githubchangeloggenerator/github-changelog-generator \
-u jittering -p traefik-kop --output "" \
--since-tag v0.10.1
traefik-kop:MIT许可协议,(c) 2015,Pixelcop Research, Inc.。
traefik:MIT许可协议,(c) 2016-2025 Containous SAS;2020-2022 Traefik Labs。
来自真实用户的反馈,见证轩辕镜像的优质服务