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

无需额外Dockerfile,如何用Docker Compose在容器中装依赖并保持运行?

解决方法:无需额外Dockerfile,在Docker Compose中为php:8.1-apache安装mysqli并保持容器运行

容器启动后随即关闭的核心原因是:你设置的command替换了镜像默认的主进程命令。php:8.1-apache镜像默认的主进程是启动Apache的apache2-foreground,当你用安装命令替换后,命令执行完成就会导致主进程退出,容器随之关闭。

下面是可行的解决方案:

方案:通过Entrypoint组合初始化命令与主进程启动命令

在Docker Compose中使用entrypoint,先执行依赖安装操作,再启动镜像默认的Apache主进程,关键是用exec将主进程替换为当前容器的PID,确保容器持续运行。

完整的docker-compose.yml示例:

version: '3.8'
services:
  php-apache:
    image: php:8.1-apache
    entrypoint: >
      bash -c "
        # 安装mysqli扩展
        docker-php-ext-install mysqli &&
        # 重启Apache使扩展生效
        apachectl restart &&
        # 执行镜像默认的entrypoint和主进程命令,exec确保成为容器主进程
        exec docker-php-entrypoint apache2-foreground
      "
    ports:
      - "80:80"

关键细节说明

  • exec命令的作用:将后续的docker-php-entrypoint apache2-foreground替换为当前bash进程的PID,这样容器的主进程就变成了Apache的运行进程,而非临时的bash进程,避免命令执行完后容器退出。
  • 重复启动的影响:每次容器启动都会执行安装命令,但docker-php-ext-install会检测模块是否已存在,重复执行不会造成问题。

验证安装结果

启动容器后,可通过以下命令检查mysqli是否成功安装:

docker exec <你的容器名称或ID> php -m | grep mysqli

如果输出mysqli,说明扩展安装成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:15:33