gpt4 book ai didi

docker - 如何验证一个分离的命令正在容器中运行

转载 作者:行者123 更新时间:2023-12-02 19:24:41 24 4
gpt4 key购买 nike

我有一个正在运行的Docker容器,我使用执行了一个新的分离命令

docker exec -d myContainer sh -c "/path/to/myExecutable"

我假设“-d分离模式:在后台运行命令”( Docker exec documentation)类似于运行如下命令:

/path/to/myExecutable &

但是如果是这样,那么当我运行 jobs时我应该看到pid,但我没有看到。
脚本仍在运行吗?它的输出在哪里?

注意:我正在运行 node:10.15.3图像

最佳答案

--detach , -d Detached mode: run command in the background



这并不意味着您在 docker run xxx command中指定的命令将在后台运行,仅意味着该命令的 docker run将在后台运行,或者说它将在调用后立即返回bash,这是一个异步调用。

例如。我们新建了一个容器,目前看不到 yes command运行(PS:linux yes命令将永远不会退出):
shubuntu1@shubuntu1:~$ docker run -idt --name try alpine
301afb11661ca8aee676f01abf55172f44e469ee977df05682ad1b49a4d218b0
shubuntu1@shubuntu1:~$ docker exec try ps aux
PID USER TIME COMMAND
1 root 0:00 /bin/sh
6 root 0:00 ps aux

1.使用-d 执行

接下来,您可以看到 docker exec -d try yes在执行命令后立即返回到 bash($),并且如果再次使用 ps aux在容器中检查,我们可以看到 yes process就在这里:
shubuntu1@shubuntu1:~$ docker exec -d try yes
shubuntu1@shubuntu1:~$ docker exec try ps aux
PID USER TIME COMMAND
1 root 0:00 /bin/sh
11 root 0:05 yes
16 root 0:00 ps aux

2.不带-d的

接下来,您可以看到 docker exec try yes不会返回 bash($),而只是不断地打印 y。如果您使用 Ctrl+C返回bash,现在可以看到那里有2个yes命令(第一个是step1中的yes,第二个只是step2中的yes)
shubuntu1@shubuntu1:~$ docker exec try yes
y
y
y
y
y
y
^C
shubuntu1@shubuntu1:~$ docker exec try ps aux
PID USER TIME COMMAND
1 root 0:00 /bin/sh
11 root 5:45 yes
21 root 0:03 yes
27 root 0:00 ps aux

这意味着使用 -d和不使用 -d,它仅影响 docker run,而不影响容器中的进程。

最后,您的问题:

just to run a one-off script and make sure it continues to run until it's finished even if I close my terminal.



您可以只使用 docker exec -d xxx来执行它,它不会离开,因为您可以使用 docker exec xxx ps aux确认它。

关于docker - 如何验证一个分离的命令正在容器中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57203289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com