脚本后不能返回到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
初始化脚本按预期运行(我可以看到/etc/postfix/init.d/
目录下的脚本输出,并且supervisord
启动了Postfix。
问题是让脚本返回到父进程(bash)而不是需要启动一个新的。 在点击supervisord
,会话就在那里,需要一个Ctrl + C来让它回到bash
提示符。
如果我在init.sh
脚本结束时不init.sh
bash
,Ctrl + D退出脚本和容器,将我返回到主机操作系统(osx)。 如果我用exit
replacebash
调用,它也会返回到主机操作系统。
supervisord
是否按照预期的方式运行,通过这种方式在前台运行? 我希望能够轻松地回到容器shell会话来检查是否正在运行。 我是否需要Ctrl + D(进入辅助bash
会话)才能做到这一点?
更新马克乙
拿出bash行,所以你不会启动一个新的shell。 如果supervisord没有自动进入后台,你可以试着用&强制它进入后台,或者有一个额外的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
最后,你的卡在一个孩子的 bash壳:(
现在如果你没有返回到父shell,你运行的最后一个命令是罪魁祸首。
/usr/bin/supervisord -c /etc/supervisord.conf
您可以强制命令在后台运行
/usr/bin/supervisord -c /etc/supervisord.conf & #the & tells to run in background
这里提到了一个解决方法来保持容器打开
- 我如何使用OpenRC(Alpine)在Docker中自动启动服务?
- 如何在Alpine Docker镜像上安装gdbserver包?
- Docker无法从Alpine上build立apk安装
- 将应用程序从主机移动到docker会使HTTP滞后时间增加5秒
- 如何在Alpine Linux上运行一个Shiny Docker容器?
- 如何在域名过期时添加Alpine Linux存储库?
- 在编译Docker Alpine中的qpid-cpp时如何解决`构buildCXX对象src / CMakeFiles / qpidcommon.dir / qpid / sys / posix / Condition.cpp.o`?
- 在nodejs高山泊坞窗图像上导出不被接受
- Webpack没有看到docker高山的文件变化