You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法访问Docker Compose中运行的FastAPI服务,请求协助排查

无法访问FastAPI容器端点的排查与解决

核心问题分析

你的配置中使用了network_mode: "host",此时Docker容器会直接复用主机的网络栈,docker-compose里的expose配置完全无效,同时需要从以下几个关键方向排查:

1. 确认Gunicorn绑定地址有效性

你的Gunicorn启动参数-b :8000等价于绑定0.0.0.0:8000,这个配置是正确的(允许所有网络接口访问)。如果误写为127.0.0.1:8000,会导致仅容器内部可访问,即使host网络模式也无法从主机访问,先确认这一点。

2. 检查主机8000端口占用情况

在主机终端执行命令,查看8000端口是否被其他进程占用:

sudo lsof -i :8000
# 或者用netstat
sudo netstat -tulpn | grep 8000

如果有其他进程占用,要么终止该进程,要么修改API服务的监听端口。

3. 验证容器内服务是否正常运行

进入容器内部,直接测试服务可用性:

docker exec -it fprint-api-v2 bash
# 在容器内访问健康端点
curl http://localhost:8000/health

如果容器内访问正常,说明服务本身没问题,问题出在主机到容器的网络通路(虽然host模式下应该直通,但仍需确认)。

4. 排查主机防火墙规则

主机防火墙可能拦截了8000端口的外部访问,临时关闭防火墙测试:

# Ubuntu/Debian 系统
sudo ufw disable
# CentOS/RHEL 系统
sudo systemctl stop firewalld

如果关闭后能正常访问,需要添加防火墙规则允许8000端口:

# Ubuntu/Debian
sudo ufw allow 8000/tcp
# CentOS/RHEL
sudo firewall-cmd --add-port=8000/tcp --permanent
sudo firewall-cmd --reload

5. 替换host网络为端口映射(推荐方案)

如果host网络不是必须的,建议移除network_mode: "host",改用标准端口映射,更符合Docker网络隔离规范:
修改docker-compose.yaml:

services:
  fprint-api:
    # 移除 network_mode: "host" 配置
    ports:
      - "8000:8000"  # 格式:主机端口:容器内部端口
    # 保留其他原有配置...

重新构建并启动服务:

docker-compose down && docker-compose up --build

此时通过http://主机IP:8000/health即可访问端点。

6. 确认依赖服务就绪状态

depends_on仅保证容器启动顺序,不确保依赖的数据库、其他服务完全就绪。如果API启动时依赖服务未准备好,会导致服务启动失败。查看容器日志排查:

docker logs fprint-api-v2

如果存在数据库连接失败日志,需要添加服务就绪等待逻辑,比如在启动命令前加入等待脚本,或者配置Docker的healthcheck机制。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:20:40