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
相关产品推荐
相关产品推荐

