Docker部署PHP Apache服务时容器以代码0退出的问题排查
问题分析与解决方案
核心问题
- 镜像选择错误:你使用的
php:8.2-cli是仅包含PHP命令行环境的镜像,没有预装Apache服务,所以apache2-foreground命令根本不存在。 - Command语法错误:你的
command配置把多个命令用&&拆分在bash -c外面,导致Docker只会执行第一个/bin/bash -c "apt-get update",执行完成后容器直接退出(返回码0表示执行成功),后面的apache2-foreground和tail -f /dev/null根本不会运行。
修正后的docker-compose.yml
version: '3' services: php-apache: image: php:8.2-apache ports: - '3000:80' volumes: - /Users/mac/Developer/laminas-sample-project:/var/www/html - /Users/mac/Developer/laminas-sample-project/scripts:/scripts # 如需执行自定义初始化脚本,将所有命令放在同一个bash -c的引号内 command: /bin/bash -c "chmod +x /scripts/entrypoint.sh && /scripts/entrypoint.sh && apache2-foreground"
关键修改说明
- 替换镜像:改用
php:8.2-apache官方镜像,该镜像预装Apache服务,默认启动命令就是apache2-foreground,能保持容器持续运行。 - 修复Command语法:将所有需要执行的命令放在同一个
/bin/bash -c的引号内,确保命令按顺序执行,最后以apache2-foreground收尾(这个命令会前台持续运行,维持容器存活,无需额外添加tail -f /dev/null)。
额外提示
如果你的初始化脚本entrypoint.sh已包含启动Apache的逻辑,或者不需要自定义初始化,可直接去掉command配置,使用镜像的默认启动命令即可。
内容的提问来源于stack exchange,提问作者Avinash Dalvi
相关产品推荐
相关产品推荐

