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

为何Supervisord仅通过Docker-Compose启动,docker run无法正常运行?

问题原因

1. docker run命令覆盖了默认启动指令

Docker镜像中定义的CMD指令会被docker run末尾传入的自定义命令直接覆盖。你执行的docker run -it -d nginx-custom:1.21.1 /bin/bash中,末尾的/bin/bash替换了Dockerfile里写的CMD ["service supervisor restart"],容器启动后只会运行bash进程,完全没有执行supervisor的启动命令,进入容器自然看不到相关进程。

2. docker compose没有覆盖启动指令

你编写的compose配置中没有指定command字段,所以容器启动时会默认执行Dockerfile中定义的启动supervisor的CMD指令,因此相关进程可以正常运行。

额外优化建议

你当前的启动命令存在潜在问题:service supervisor restart属于一次性执行命令,执行完成后主进程就会退出,正常情况下容器会随之停止。你现在用compose能正常运行,完全依赖配置里的tty: true参数给容器挂了伪终端保持运行,不符合容器单主进程的最佳实践。
建议将Dockerfile中的CMD替换为前台启动supervisord的指令:

CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"]

修改后无需依赖tty配置,容器即可稳定运行,进程管理也更符合Docker的设计规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:54:07