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

Docker执行install.sh脚本后PHP容器启动失败排查

问题根本原因
  • 你在docker-compose中配置的command参数会完全替换PHP镜像的默认启动命令,而非在原有服务启动前额外执行脚本。官方PHP-FPM镜像默认会在容器启动时运行PHP-FPM主进程,你配置的命令覆盖了这个逻辑,就算脚本执行完,容器也不会启动PHP服务,会直接退出。
  • 安装wget时进程卡住的直接原因:apt安装部分依赖包时会弹出交互式配置提示(比如时区选择、配置项确认),你执行脚本时没有指定非交互安装模式,进程会一直阻塞等待用户输入,从外部看就像安装进程卡死无响应。
  • 你之前把安装命令写在Dockerfile的RUN指令中不生效,是因为修改Dockerfile后没有重新构建镜像,docker-compose默认会使用本地已缓存的旧版本镜像,不会自动应用你新写的构建逻辑。
  • 额外逻辑误区:系统依赖安装属于镜像构建阶段的工作,不应该放在容器启动阶段执行,否则每次容器重启都会重复执行安装流程,既拖慢启动速度,也容易因为网络、交互问题导致启动失败。
修复方案

推荐方案:将依赖安装移回Dockerfile(最规范)

  1. 修改./.docker/php/Dockerfile,把依赖安装逻辑写入构建步骤,同时指定apt为非交互模式:
# 替换为你实际使用的PHP-FPM基础镜像版本
FROM php:7.4-fpm

# 配置apt为非交互模式,避免安装时弹框卡住
ENV DEBIAN_FRONTEND=noninteractive

# 安装系统依赖
RUN apt-get update \
    && apt-get install -y wget \
    # 此处可追加其他你需要的系统依赖
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 保留镜像默认的ENTRYPOINT和CMD,不要手动覆盖,确保PHP-FPM正常启动
  1. 删掉docker-compose中php服务下的command: /bin/bash -c "./install.sh"配置行。
  2. 启动服务时增加--build参数强制重新构建PHP镜像,让Dockerfile的修改生效:
docker-compose up -d --build

临时方案:保留启动脚本执行逻辑

如果你确实需要在容器启动时执行初始化脚本,需要修改脚本,在脚本最后手动启动PHP-FPM主进程,同时配置apt非交互模式:

  1. 修改./src/install.sh内容:
#!/bin/bash
mkdir testdir
export DEBIAN_FRONTEND=noninteractive
apt-get update && apt-get install -y wget
# 脚本最后执行默认启动命令,拉起PHP-FPM主进程
exec docker-php-entrypoint php-fpm
  1. 给脚本增加可执行权限(宿主机执行):
chmod +x ./src/install.sh
  1. 重新启动容器即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:48:23