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

Docker执行system prune后容器仍持续运行的故障排查求助

问题:Docker容器/进程持续占用80端口无法终止(macOS Monterey)
  • 开发Dash Plotly应用时启动的容器始终运行,占用0.0.0.0:80端口
  • 执行docker ps找到容器ID后运行docker stop <container-ID>,端口仍被占用,Web应用可正常访问
  • 执行docker system prune --all --force --volumes清空Docker Desktop所有镜像后,重启电脑Web应用依旧能打开
  • 用sudo lsof -i -P -n | grep 80查到是httpd进程监听80端口,但sudo kill -9 <PID>无法终止该进程
  • 清理浏览器缓存、使用隐私模式访问,Web应用仍可正常加载

相关配置与命令

近似Dockerfile配置:

FROM python:3.10

# EXPOSE 8050

WORKDIR /app

COPY . .
COPY models /app/models/

RUN pip install -r requirements.txt

EXPOSE 8050

CMD ["gunicorn", "-b", "0.0.0.0:8050", "--reload", "app:server"]

镜像构建命令:

docker build -f Dockerfile -t app:latest .

可能的容器启动命令(含自动重启参数):

docker run --restart always -p 80:8050 app:latest

Docker版本:

Docker version 20.10.24, build 297e128

解决方案

1. 清理Docker自动重启容器残留

即使docker ps未显示,可能存在设置了--restart always的已退出容器:

  • 执行docker ps -a列出所有容器(含已停止),找到关联的app容器,运行docker rm -f <container-ID>强制删除
  • 若容器仍存在,执行docker update --restart=no <container-ID>取消自动重启配置

2. 排查并关闭macOS自带httpd服务

macOS自带Apache/httpd服务可能误启动占用端口:

  • 检查服务状态:sudo apachectl status
  • 停止服务:sudo apachectl stop
  • 禁用开机自启:sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

3. 彻底重置Docker守护进程

  • 右键点击Docker Desktop菜单栏图标,选择Quit Docker Desktop完全退出
  • 执行ps aux | grep docker找到所有Docker相关进程,用sudo kill -9 <PID>强制终止
  • 重新启动Docker Desktop,再次检查端口占用

4. 验证修复结果

执行sudo lsof -i -P -n | grep 80确认80端口无监听进程;访问0.0.0.0:80验证Web应用无法打开。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:02:55