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

如何在docker-compose.yml中配置容器启动后执行指定命令?

问题原因

你遇到的容器启动后立即停止的问题,是因为**command指令覆盖了官方php:8.0-apache镜像的默认启动命令**。这个镜像的默认主进程是启动Apache服务(命令为apache2-foreground),当你用command: sh -c "docker-php-ext-install mysqli"替换后,容器只会执行安装mysqli的命令,命令执行完毕后主进程结束,容器就自动停止了。

正确解决方法

方法一:自定义Dockerfile(推荐)

这种方式会把扩展安装到镜像里,后续启动容器不用重复安装,更高效。

  1. 在项目根目录创建Dockerfile,内容如下:
FROM php:8.0-apache
# 安装mysqli扩展
RUN docker-php-ext-install mysqli
# 保留官方镜像的默认启动命令(可选,官方镜像已默认定义)
CMD ["apache2-foreground"]
  1. 修改docker-compose.yml,将image替换为build指令:
php-enc:
  container_name: php-apache
  build: .  # 指向Dockerfile所在目录
  volumes:
    - ./php/src:/var/www/html/
  ports:
    - 8000:80
  depends_on:
    - db
  1. 重新构建并启动容器:
docker-compose up --build

方法二:在command中串联启动命令

如果不想自定义镜像,可以在command里先执行扩展安装,再启动Apache服务:

修改docker-compose.yml的command部分:

php-enc:
  container_name: php-apache
  image: php:8.0-apache
  command: sh -c "docker-php-ext-install mysqli && apache2-foreground"
  volumes:
    - ./php/src:/var/www/html/
  ports:
    - 8000:80
  depends_on:
    - db

注意:这种方式每次启动容器都会重新安装一次mysqli扩展,启动速度会变慢,适合临时测试场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:42:08