Docker Compose中用&&串联命令后第二条不执行的问题排查
问题分析与解决
你的问题核心是**/tmp/startup.sh脚本执行后没有正常退出**,导致&&后的命令无法触发。通常这种情况是因为startup.sh里启动了前台运行的服务(比如Apache的httpd -DFOREGROUND或者Django开发服务器),脚本会一直阻塞在这个服务进程上,根本没机会执行后面的echo命令。
直接解决办法:调整命令顺序
把环境变量配置命令放到前面,先完成写入再启动服务:
command: /bin/bash -c "echo 'export DJANGO_SETTINGS_MODULE=core.settings.dev' >> /etc/apache2/envvars && /tmp/startup.sh"
这样环境变量会先被写入,然后启动服务(即使服务前台运行,也不影响已经完成的配置)。
更规范的方案:使用单独的入口脚本
把所有启动逻辑放到一个单独的脚本里,避免命令行的引号和串联问题:
- 创建一个
entrypoint.sh脚本(可以挂载到容器内,或者打包进镜像):
#!/bin/bash # 写入环境变量 echo 'export DJANGO_SETTINGS_MODULE=core.settings.dev' >> /etc/apache2/envvars # 执行原有启动脚本 /tmp/startup.sh
- 给脚本添加执行权限:
chmod +x entrypoint.sh - 修改Docker Compose的命令配置:
command: /bin/bash /path/to/entrypoint.sh
(注意替换/path/to/entrypoint.sh为容器内实际的脚本路径)
额外排查点
如果调整顺序后还是有问题,检查:
startup.sh脚本是否有exit语句提前退出,导致后续逻辑无法执行- 容器内
/etc/apache2/envvars文件是否有写入权限(你说单独执行能成功,这条大概率没问题)
内容的提问来源于stack exchange,提问作者user15937765
相关产品推荐
相关产品推荐

