我有一个基于 Alpine 的 Docker 容器,它运行S6 覆盖管理其中的两个服务(一个音乐数据库和一个用于管理它的 Web 界面)。问题是第二个服务是可选的,它依赖于${SERVICE_2}
环境变量(true|false)。
所以,基本上我有这个,但是服务无法运行,因为if
块无效:
#!/usr/bin/execlineb -P
with-contenv
if [ $SERVICE_2 = true ]; then \
sh -c "exec -a service_2 /usr/bin/php /var/www/service_2_music_admin_script.php >> /proc/self/fd/1 2>&1" \
;fi
执行脚本返回:
if: fatal: unterminated block
顺便说一句,容器没有bash
;它运行 Busybox。除非非常关键,否则我尽量避免安装 bash。
答案1
经过一番挖掘,execline 中的 If 块变得太过细微。因此,我解决了根本问题:使用容器环境变量将其更改为 sh。
#!/usr/bin/with-contenv sh
...
然后我用来exec
执行该过程(否则它不会连接到 S6)。