Docker Swarm环境下php-fpm容器无明显报错反复重启问题求助
问题根因
你遇到的核心问题是Swarm节点上使用的php:latest镜像并非你本地自定义的带php-fpm的镜像:
- 本地执行
docker-compose时会自动根据你指定的Dockerfile构建镜像,本地生成的php:latest镜像带你配置的CMD ["php-fpm", "-R", "-F"]启动命令,所以运行正常。 - Docker Swarm部署时不会执行镜像构建操作,会直接拉取匹配标签的镜像:你的Swarm节点上的
php:latest是Docker Hub的官方PHP CLI镜像,默认启动命令是php -a启动交互shell,无tty环境时会直接退出,正好对应你日志里的Interactive shell输出和不断重启的现象。
解决步骤
- 先验证镜像问题:在Swarm管理节点执行如下命令,如果返回
php-fpm不存在,即可确认是镜像问题
docker run --rm php:latest which php-fpm
- 按以下流程修复:
- 给你的自定义PHP镜像设置唯一标签,不要使用
latest这类通用标签避免和官方镜像冲突,比如打标签为my-php-fpm:7.2 - 单节点Swarm可以直接在管理节点执行构建命令生成自定义镜像,多节点Swarm请将镜像推送到私有镜像仓库供所有节点拉取
- 修改
docker-compose.yaml中php服务的image字段为你的自定义镜像标签:
php: env_file: .env image: my-php-fpm:7.2 # 替换为你实际的自定义镜像标签 build: context: ./docker/images/php dockerfile: prod.Dockerfile # 其余配置保持不变
- 重新部署Stack即可恢复正常。
额外排查点
如果确认镜像正确仍有问题,可以按以下步骤排查:
- 验证php-fpm配置合法性,执行命令测试配置是否有误:
docker run --rm 你的自定义镜像标签 php-fpm -t
- 检查
/run/php-fpm目录权限,php-fpm进程无法写入pid文件也会导致启动失败退出。
内容的提问来源于stack exchange,提问作者overflaw
相关产品推荐
相关产品推荐

