如何在docker中以分离模式运行bash?

时间:2017-01-19 01:37:10

标签: docker

docker run -d ubuntu bash 容器将立即退出。我需要的是保持容器运行,我可以使用exec登录此容器。

事实上,我需要在bash脚本中执行这些操作:

docker run -it ubuntu bash
docker run -it centos bash

但它不起作用。

3 个答案:

答案 0 :(得分:4)

另一种选择是同时使用aws rds describe-db-instances --output json | less http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/rds-metricscollected.html (我希望它们是相互排斥的,并且很惊讶地发现它们不是)

请参阅下面的示例输出,我启动了一个带有-i标志的Ubuntu容器,然后等了几分钟并运行-d以确认容器仍在运行。

-itd

答案 1 :(得分:3)

为什么要持久运行bash?一个简单的解决方案就是:

docker run centos sleep inf

这将永远运行sleep,因此容器不会退出。现在,您可以docker exec尽可能多地加入它。

答案 2 :(得分:0)

在容器中bash开始然后exec进入容器毫无意义。您可以运行sleep infinity达到相同的效果(例如docker run -d alpine sleep infinity)。因为当您exec时,您在容器中启动了另一个进程。您的bash进程将被浪费(不使用)。

如果您想在容器中运行一个交互式进程(例如sh)(例如以后可以附加到它):

$ docker run --rm -itd alpine sh
e2ea4dd1fea30cc91cb27b3bca7d6cbc9718063ef602a02bbea9aa2f7dbf2a3b

$ docker exec -it e2ea4dd1fea30cc91cb27b3bca7d6cbc9718063ef602a02bbea9aa2f7dbf2a3b sh
/ # ps
PID   USER     TIME  COMMAND
    1 root      0:00 sh
    6 root      0:00 sh
   12 root      0:00 ps
/ # <Ctrl-P><Ctrl-Q>

$ docker attach e2ea4dd1fea30cc91cb27b3bca7d6cbc9718063ef602a02bbea9aa2f7dbf2a3b
/ # ps
PID   USER     TIME  COMMAND
    1 root      0:00 sh
   13 root      0:00 ps
/ #

--rm使其在停止后自动删除容器。运行交互式流程通常需要-it

如果在连接容器后在容器中运行exit(或按Ctrl-D),外壳将退出,容器将停止。如果要分离,但要保持运行,请按Ctrl-P Ctrl-Q