我无法获得返回 bash 的脚本。
该脚本通过以下 Docker 指令启动:
ENTRYPOINT ["/bin/bash", "-c"]
CMD ["set -e && /config/startup/init.sh"]
初始化脚本如下所示:
#!/bin/bash
if [ -d /etc/postfix/init.d ]; then
for f in /etc/postfix/init.d/*.sh; do
[ -f "$f" ] && . "$f"
done
fi
echo "[x] Starting supervisord ..."
/usr/bin/supervisord -c /etc/supervisord.conf
bash
这是我用来将图像启动到容器中的命令:
docker run -it --env-file ENV_LOCAL mailrelay
初始化脚本按预期运行(我看到/etc/postfix/init.d/
目录中脚本的输出并supervisord
启动 Postfix。
问题是让脚本返回父进程(bash),而不是需要启动一个新进程。在它击中supervisord
会话后,会话就坐在那里,需要 Ctrl+C 才能让它回到bash
提示状态。
bash
如果我在脚本末尾停止调用 to init.sh
,Ctrl+D 退出脚本和容器,将我返回到主机操作系统 (osx)。如果我bash
用exit
,它也会返回到主机操作系统。
supervisord
通过这种方式在前台运行,是否表现得像它应该的那样?我希望能够轻松地回到容器 shell 会话以检查事情是否正在运行。我是否需要 Ctrl+D (进入二级bash
会话)才能执行此操作?
更新 马克 B
取出 bash 行,这样你就不会启动新的 shell。如果 supervisord 没有自动进入后台,您可以尝试使用 & 强制它进入后台运行它,或者可能有一个额外的 cli 选项强制它进入守护程序模式
我已经尝试删除对 的最后一次调用bash
,但正如我所提到的,它仍然在那里,并且 Ctrl+D 将我带到主机操作系统(退出容器)。
我刚刚尝试过/usr/bin/supervisord -c /etc/supervisord.conf &
(并在最后停止调用bash
),它立即返回主机操作系统,退出容器。我假设是因为容器没有什么可以“做”,所以停止了。