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

Docker镜像在Windows和一台Ubuntu正常运行,另一台报错找不到gunicorn.conf

根因分析

最核心的触发原因是挂载的外部卷覆盖了镜像内的/code目录:
你的docker-compose配置里将外部命名卷query-results-volume直接挂载到了容器的/code路径,而你的gunicorn配置文件是构建镜像时COPY到/code/docker/semantic_search_django/gunicorn.conf路径下的。当故障机器上的该外部卷不存在对应目录结构时,挂载后会直接覆盖镜像中原有的/code目录内容,导致程序找不到配置文件。
其他可能的次要原因:docker版本差异、卷权限异常、selinux限制。

排查步骤
  • 确认镜像本身无问题:在故障机器上执行以下命令,不挂载卷直接检查镜像内的文件是否存在
    docker run --rm --entrypoint ls m.artifactory.com/ciee_ssrdjango /code/docker/semantic_search_django/gunicorn.conf
    
    如果正常输出文件信息,说明镜像完整,问题出在挂载环节。
  • 检查故障机器的卷内容:执行命令查看命名卷内的目录结构
    docker run --rm -v query-results-volume:/vol busybox ls -la /vol/docker/semantic_search_django/
    
    正常情况下会输出gunicorn.conf文件,故障机器此处会提示目录不存在。
  • 对比两台Linux设备的docker版本:执行docker --version、docker compose version确认是否存在版本差异导致挂载逻辑不同。
  • 检查docker daemon日志:启动容器时执行journalctl -u docker.service -f查看是否有挂载相关的权限报错。
解决方案

永久修复(推荐)

修改docker-compose.yml的挂载配置,不要直接挂载到整个/code目录,仅挂载需要持久化的query_results子目录即可,避免覆盖镜像内的代码和配置:
将原配置中的

volumes:
  - query-results-volume:/code

修改为

volumes:
  - query-results-volume:/code/query_results

修改后重新执行docker-compose up -d即可。

临时修复(不修改配置的应急方案)

将镜像内的/code内容同步到故障机器的命名卷中:

  1. 停止删除运行失败的容器
  2. 执行命令同步文件:
    docker run --rm -v query-results-volume:/vol m.artifactory.com/ciee_ssrdjango cp -r /code/* /vol/
    
  3. 重新启动容器即可。

兜底修复

直接删除故障机器上的旧卷,让docker重新创建新卷(第一次挂载新卷时会自动将镜像内/code目录的内容同步到卷中):

docker stop ciee_ssrdjango
docker rm ciee_ssrdjango
docker volume rm query-results-volume
docker-compose up -d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:06:04