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

添加command后Docker Compose的app容器异常停止求助

问题分析

你的app容器停止,核心是command里的命令链存在多个致命问题,只要其中一步失败,整个bash脚本就会退出,容器随之停止:

  • 复制命令逻辑错误:cp -r /var/www/html/* /var/www/html/.docker/ 会把当前目录下的所有内容(包括.docker本身)递归复制到.docker目录,触发循环复制,直接导致命令失败。
  • Composer未安装:php:8.1.0-apache镜像默认没有预装Composer,执行composer install会报错退出。
  • Apache重启方式错误:Docker容器依赖主进程维持运行,原镜像的主进程是Apache,用service apache2 restart会终止原主进程,后续的tail -f /dev/null即使执行,也会因为主进程替换导致容器稳定性问题。
修复后的配置方案

替换app服务的command,调整逻辑并补充必要依赖安装:

version: '3'
services:
  app:
    image: php:8.1.0-apache
    ports:
      - "8080:80"
    volumes:
      - .:/var/www/html
    environment:
      APP_ENV: development
    working_dir: /var/www/html
    command: >
      bash -c "
      # 复制配置文件到对应目录
      cp /var/www/html/.docker/php.ini /usr/local/etc/php/ &&
      cp /var/www/html/.docker/default.config /etc/apache2/sites-available/000-default.conf &&
      # 启用Apache rewrite模块
      a2enmod rewrite &&
      # 安装Composer
      php -r \"copy('https://getcomposer.org/installer', 'composer-setup.php');\" &&
      php -r \"if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;\" &&
      php composer-setup.php &&
      php -r \"unlink('composer-setup.php');\" &&
      # 执行Composer依赖安装
      php composer.phar install &&
      # 用官方前台命令启动Apache,维持容器运行
      apache2-foreground
      "

  prometheus:
    image: prom/prometheus:v2.40.0
    container_name: prometheus
    ports:
      - 9090:9090
    command:
      - --config.file=/etc/prometheus/prometheus.yml
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro

  grafana:
    image: grafana/grafana:9.2.0
    ports:
      - "3000:3000"
    container_name: grafana
    depends_on:
      - prometheus
    volumes:
      - ./grafana-storage:/var/lib/grafana
关键调整说明
  • 删除错误复制命令:去掉了会导致循环复制的cp -r /var/www/html/* /var/www/html/.docker/,只保留必要的配置文件复制步骤。
  • 预装Composer:添加官方标准的Composer安装流程,确保composer install命令可以正常执行。
  • 改用官方Apache启动命令:用apache2-foreground替代service apache2 restart && tail -f /dev/null,该命令会以前台方式运行Apache,作为容器的主进程,从根本上保证容器持续运行。
  • 命令链容错:所有步骤用&&串联,只有前一步执行成功才会推进到下一步,方便通过docker logs <app容器名>排查具体失败环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:25:39