You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Traefik与nip.io暴露应用时出现404错误的求助

问题排查与解决方案

我来帮你分析下这个问题——从你给出的curl输出和环境差异来看,核心问题大概率出在IPv4/IPv6的监听配置或者Fedora系统的网络/防火墙设置上,咱们一步步拆解:

先看关键差异点

对比两次curl的输出,你会发现一个容易忽略的细节:

  • 直接请求whoami.127.0.0.1.nip.io时,curl连接的是IPv4地址127.0.0.1
  • 手动指定Host头请求localhost时,curl连接的是IPv6地址::1

而Traefik的路由规则本身是正常的(不然第二次请求不会成功),所以问题出在「IPv4请求到达Traefik时的处理逻辑」上。

排查步骤与解决方案

1. 查看Traefik Debug日志,确认请求细节

你已经给Traefik开了logLevel=DEBUG,先启动容器后实时查看日志:

docker-compose logs -f traefik

然后执行curl -vvv whoami.127.0.0.1.nip.io,重点看日志里是否显示了正确的Host头,以及是否匹配到了whoami服务的frontend规则。如果Host头正确但没匹配,那大概率是Traefik的监听范围有问题。

2. 强制用IPv6测试域名访问

试试让curl强制走IPv6访问你的nip.io域名:

curl -vvv -6 whoami.127.0.0.1.nip.io

如果这次能返回200,说明Traefik默认只监听了IPv6,没正确处理IPv4请求。这时候需要调整Traefik的entrypoint配置,让它明确监听所有IP地址:

修改docker-compose里Traefik的command字段:

command: --web --docker --docker.domain=app.test --logLevel=DEBUG --entrypoints='Name:http Address:::80'

:::80表示同时监听所有IPv4和IPv6的80端口,然后重启容器:

docker-compose down && docker-compose up -d

再测试IPv4的请求应该就能正常工作了。

3. 检查Docker的IPv6配置

Fedora的Docker默认可能没启用IPv6,导致容器无法正确处理跨协议的请求?可以检查/etc/docker/daemon.json文件,如果没有就新建,添加以下内容:

{
  "ipv6": true,
  "fixed-cidr-v6": "fd00::/80"
}

然后重启Docker服务:

sudo systemctl restart docker

再重启你的Traefik容器测试。

4. 检查Firewalld的Masquerade设置

Docker的端口转发依赖firewalld的masquerade规则,Fedora默认可能没开这个?执行以下命令检查:

sudo firewall-cmd --query-masquerade

如果返回no,就开启它:

sudo firewall-cmd --add-masquerade --permanent
sudo firewall-cmd --reload

这一步能解决很多Docker端口转发的隐性问题。

5. 临时切换到Host网络模式测试

如果上面的步骤都没解决,可以临时给Traefik加上network_mode: host,让它直接使用主机网络:

traefik:
    image: traefik:1.7-alpine
    command: --web --docker --docker.domain=app.test --logLevel=DEBUG
    ports:
      - 80:80
      - 8080:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    network_mode: host

重启容器后测试,如果能正常访问,说明是Docker桥接网络在Fedora上的配置问题,你可以再针对性调整桥接网络的设置。

为什么其他系统没问题?

Mac和Ubuntu的Docker默认配置(比如IPv6启用、防火墙规则)和Fedora不一样:Ubuntu默认用ufw而非firewalld,Mac的Docker网络栈本身做了更多兼容处理,所以不会遇到这个问题。

内容的提问来源于stack exchange,提问作者user672009

火山引擎 最新活动