脚本后无法返回到 shell 会话



我无法让脚本返回 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

init 脚本按预期运行(我在 /etc/postfix/init.d/ 目录中看到脚本的输出,supervisord启动 Postfix。

问题是让脚本返回到父进程 (bash),而不是需要启动一个新进程。在它命中supervisord会话将驻扎在那里,需要 Ctrl+C 才能使其返回到bash提示符。

如果我在init.sh脚本结束时关闭对bash的调用,Ctrl+D 将退出脚本和容器,将我返回到主机操作系统 (osx)。如果我将bash调用替换为 exit ,它也会返回到主机操作系统。

supervisord的行为方式是否应该按照它应该的方式,以这种方式在前台运行?我希望能够轻松返回容器外壳会话以检查是否正在运行。我是否需要按 Ctrl+D(进入辅助bash会话)才能执行此操作?

更新马克

·

取出 bash 线,这样你就不会启动一个新的外壳。 如果 主管不会自动进入后台,您可以 尝试运行它 & 以强制它进入后台,或者可能 有一个额外的CLI选项可以强制它进入守护程序模式

我尝试删除对bash的最后一次调用,但正如我所提到的,它只是坐在那里,Ctrl + D 将我带到主机操作系统(退出容器)。

我刚刚尝试了/usr/bin/supervisord -c /etc/supervisord.conf &(并在最后停止了对bash的调用),它只是立即返回到主机操作系统,退出容器。我假设是因为容器没有什么可"做"的了,所以停止了。

#!/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
one
bash # You are spawning a new bash shell here. Remove this statement

最后,你被困在一个儿童狂欢的外壳:(

现在,如果您不返回到父 shell,则您运行的最后一个命令是罪魁祸首。

/usr/bin/supervisord -c /etc/supervisord.conf

您可以通过以下方式强制命令在后台运行

/usr/bin/supervisord -c /etc/supervisord.conf & #the & tells to run in background

此处提到了保持容器打开的解决方法

相关内容

  • 没有找到相关文章

最新更新