基于php5.6-apache镜像:挂载后执行命令并保留Apache运行的方法
解决php5.6-apache镜像挂载目录、执行自定义命令且保留默认入口的问题
方案1:自定义Entrypoint脚本(推荐,稳定性更高)
php5.6-apache镜像的默认启动命令是apache2-foreground,我们可以通过自定义启动脚本,先执行完你的自定义操作,再调用这个默认命令,同时保证Apache成为容器的主进程(用exec确保信号能正常传递)。
操作步骤:
- 新建
start.sh脚本,写入需要执行的自定义命令和默认启动指令:
#!/bin/sh # 这里替换成你需要执行的命令,比如: # 修正应用目录权限 chown -R www-data:www-data /var/www/html # 安装项目依赖(如果需要) composer install --no-dev # 复制示例配置文件 cp /var/www/html/config.example.php /var/www/html/config.php # 最后启动Apache默认进程,exec让它成为容器PID1进程 exec apache2-foreground
给脚本添加执行权限:
chmod +x start.sh在你的Dockerfile中引入这个脚本并设置为入口点:
FROM php:5.6-apache # 复制自定义启动脚本到容器内 COPY start.sh /usr/local/bin/start.sh # 设置容器启动入口 ENTRYPOINT ["start.sh"]
- docker-compose.yml中正常配置挂载,无需额外修改command:
version: '3' services: php-apache: build: . volumes: - ./你的应用目录:/var/www/html # 挂载本地应用目录到容器Apache根目录 ports: - "8080:80"
方案2:在docker-compose的command字段直接串联命令
如果不想修改Dockerfile,也可以直接在docker-compose里用shell命令串联操作,先执行自定义任务,再启动Apache:
version: '3' services: php-apache: image: php:5.6-apache volumes: - ./你的应用目录:/var/www/html ports: - "8080:80" command: /bin/sh -c "chown -R www-data:www-data /var/www/html && composer install --no-dev && apache2-foreground"
注意事项:
- 必须用
/bin/sh -c包裹所有命令,确保shell能解析多命令串联逻辑 - 末尾一定要加上
apache2-foreground,这是php5.6-apache的默认启动命令,保证Apache正常运行 - 若自定义命令需要环境变量,直接在docker-compose的
environment字段添加即可
内容的提问来源于stack exchange,提问作者realtebo
相关产品推荐
相关产品推荐

