为什么我的 Docker 在执行我的 shell 脚本后退出?谢谢。
Docker版本:
docker --version
Docker version 1.12.4, build 1564f02
我的图片:
docker pull lw96/ubuntu-16.04-lnmp1.3
运行后:
docker run -it -d --name test -p 8080:80 lw96/ubuntu-16.04-lnmp1.3 sh /root/run.sh
我检查了:< code>docker ps -a
root@ubuntu:/home/liwei# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68c0ce4c59f7 a57b0c1a60cf "/bin/bash" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp test
以下是run.sh:
#! /bin/bash
lnmp restart
echo "lnmp already start"
exit 0
我得到了日志:
root@ubuntu:/home/liwei# docker logs -f test
+-------------------------------------------+
| Manager for LNMP, Written by Licess |
+-------------------------------------------+
| http://lnmp.org |
+-------------------------------------------+
Stoping LNMP...
Stoping nginx... nginx is not running.
* MySQL server PID file could not be found!
Gracefully shutting down php-fpm /etc/init.d/php-fpm: 82: kill: No such process
................................... failed. Use force-quit
Starting LNMP...
Starting nginx... done
Starting MySQL
.. *
Starting php-fpm done
lnmp already start!
之后,我的码头集装箱出口:
root@ubuntu:/home/liwei# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb98d7427802 lw96/ubuntu-16.04-lnmp1.3 "sh /root/run.sh" 8 minutes ago Exited (0) 7 minutes ago test
但是,当我使用时:
docker pull lw96/ubuntu-16.04-lnmp1.3
docker run -it -d -p 80:80 --name test lw96/ubuntu-16.04-lnmp1.3
docker exec -it test /bin/bash
cd ~ && ./run.sh
我的容器工作得很好。为什么?
只要主进程正在运行,docker容器就会运行,一旦切入点/命令进程退出,它就会结束。在您的例子中,只要您到达退出0
行,您的进程就完成了,docker容器应该退出。
如果你想防止这种情况,你必须保持你的进程运行。这里有很多选项,比如在前台运行进程,或者通过执行tail-f/some/log/file
之类的操作来保持进程运行,其中日志来自后台运行进程。
问题内容: 我正在写一个如下的shell脚本: 现在,我想要实现的是列出$ ACTIONS_DIR中的每个文件以执行该文件。$ ACTIONS_DIR下的每个文件都是另一个Shell脚本。 现在,这里的问题在于,使用exec之后,脚本将停止并且不会转到下一个文件。任何想法为什么会这样? 问题答案: 替换shell进程。如果只想将该命令作为子进程调用,则将其删除。
我正试图按照以下说明为Dash生成文档集:http://kapeli.com/docsets.问题是,脚本在wget之后不会继续,并且似乎不会抛出任何错误。当我把脚本复制到终端时,一切都很好。 我使用的是MacOS 10.8.4和默认的bash。 我查看了其他帖子,比如我的shell脚本在exec之后停止,但我没有在这里使用exec。 为什么脚本退出?
问题内容: 从数据库表和solr中读取数据后,我编写了一个脚本来更新数据库表。我正在使用asyn.waterfall模块。问题在于,成功完成所有操作后,脚本不会退出。我使用过的数据库连接池也认为可能正在创建脚本以无限期等待。我想将此脚本放在crontab中,如果无法正确退出,它将不必要地创建大量实例。 问题答案: 我刚刚经历了这个问题。 仅仅使用的问题是我正在处理的程序正在创建句柄,但从未销毁它们
问题内容: 我正在通过Jenkins构建Qt GUI应用程序。我添加了3个构建步骤: 构建测试可执行文件 运行测试可执行文件 用gcovr编制覆盖率报告 由于某种原因,用于运行测试可执行文件的shell任务在执行后会停止。即使是简单的也不运行。测试是使用Google Test编写的,并输出xUnit XML文件,这些文件将在构建后进行分析。一些测试启动了应用程序的用户界面,因此我安装了jenkin
问题内容: 我希望服务器每分钟执行一次节点脚本。如果我手动执行文件(),该程序将完美执行,因此,我很确定这不是问题。但是,当我将其交给cron执行时,什么也没发生。 这是cron文件中的行。 这是一个示例日志: 可执行文件: 知道我为什么要广播静音吗?我应该在其他地方调试? 更新: 我相信问题与我的相对文件路径有关,并且main.js从其自己的目录外部执行。 所以现在,我已经放置在目录中。看起来像
我有一个shell脚本,它执行sql构建工作。 当从unix提示符手动调用它时,它正在执行并按预期给出结果。 但是当它从java调用时,它并没有完全执行。 手动执行: MODIFY_PATCH_CREATION. ksh 118765CP_14052906_28112015134449_16 日志文件显示为: 但是如果我从java程序执行相同的操作,如下所示: Java代码: 当作为java Sh