如何在Docker中查看正在运行的容器/进程的完整命令?
$ docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5b6291859b61 nginx:1.7.8 "nginx -g 'daemon of 4 minutes ago Exited (0) 4 minutes ago thirsty_brattain
Run Code Online (Sandbox Code Playgroud)
我只能在这里看到"nginx -g"守护进程,而不是完整的命令.
ssc*_*oss 453
docker ps -a --no-trunc 将显示完整命令以及正在运行的容器的其他详细信息.
st0*_*0ne 179
使用:
docker inspect -f "{{.Name}} {{.Config.Cmd}}" $(docker ps -a -q)
Run Code Online (Sandbox Code Playgroud)
......对所有集装箱进行"码头检查".
Abh*_*ain 15
使用来自 git 存储库https://github.com/lavie/runlike 的runlike
安装 runlike
pip install runlike
Run Code Online (Sandbox Code Playgroud)
因为它接受容器 id 作为参数,所以使用以下命令提取容器 id
docker ps -a -q
Run Code Online (Sandbox Code Playgroud)
您可以使用 runlike 使用以下命令提取完整的 docker run 命令
runlike <docker container ID>
Run Code Online (Sandbox Code Playgroud)
JDi*_*teo 14
使用:
docker inspect -f "{{.Path}} {{.Args}} ({{.Id}})" $(docker ps -a -q)
Run Code Online (Sandbox Code Playgroud)
这将显示命令路径和参数,类似于docker ps.
Gun*_*ner 12
将 Dylan 的评论变成一个完整的答案,因为太有用了:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike YOUR-CONTAINER
Run Code Online (Sandbox Code Playgroud)
它有什么作用?在容器内运行https://github.com/lavie/runlike,获取完整的 docker run 命令,然后为您移除容器。
TL-DR
docker ps --no-trunc并docker inspect CONTAINER提供执行以启动容器的入口点,以及传递给的命令,但这可能会遗漏某些部分,例如${ANY_VAR}因为容器环境变量未打印为已解析。
为了克服这一点,它docker inspect CONTAINER有一个优势,因为它还允许从Config.Env属性中单独检索 env 变量及其在容器中定义的值。
docker ps并docker inspect提供有关执行的入口点及其命令的信息。通常,这是一个包装入口点脚本 ( .sh) 而不是由容器启动的“真实”程序。要获取有关信息,请使用ps或/proc/1/cmdline帮助请求流程信息。
1) docker ps --no-trunc
它打印所有正在运行的容器的入口点和执行的命令。虽然它打印传递给入口点的命令(如果我们传递了它),但它不显示 docker env 变量(例如$FOOor ${FOO})的值。
如果我们的容器使用 env 变量,可能还不够。
例如,运行一个高山容器:
docker run --name alpine-example -e MY_VAR=/var alpine:latest sh -c 'ls $MY_VAR'
Run Code Online (Sandbox Code Playgroud)
当使用 docker -ps 如:
docker ps -a --filter name=alpine-example --no-trunc
它打印:
容器 ID 图像命令创建状态端口名称 5b064a6de6d8417... alpine:latest "sh -c 'ls $MY_VAR'" 2 分钟前退出 (0) 2 分钟前 alpine-example
我们看到传递给入口点的命令 :sh -c 'ls $MY_VAR'但$MY_VAR 确实没有解析。
2) docker inspect CONTAINER
当我们检查 alpine-example 容器时:
docker inspect alpine-example | grep -4 Cmd
Run Code Online (Sandbox Code Playgroud)
该命令也在那里,但我们仍然看不到 env 变量值:
"Cmd": [
"sh",
"-c",
"ls $MY_VAR"
],
Run Code Online (Sandbox Code Playgroud)
事实上,我们看不到这些 docker 命令的内插变量。
作为一种权衡,我们可以使用 docker inspect 分别显示容器的命令和环境变量:
docker inspect alpine-example | grep -4 -E "Cmd|Env"
Run Code Online (Sandbox Code Playgroud)
那打印:
"Env": [
"MY_VAR=/var",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"sh",
"-c",
"ls $MY_VAR"
]
Run Code Online (Sandbox Code Playgroud)
更 docker 的方式是使用允许指定要渲染的 JSON 属性的--format标志docker inspect:
docker inspect --format '{{.Name}} {{.Config.Cmd}} {{ (.Config.Env) }}' alpine-example
Run Code Online (Sandbox Code Playgroud)
输出:
/alpine-example [sh -c ls $MY_VAR] [MY_VAR=/var PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin]
3)从容器本身检索启动的进程以运行容器
docker 执行的入口点和命令可能会有所帮助,但在某些情况下,这还不够,因为这“只是”一个.sh负责启动真实/核心进程的包装入口点脚本 ( )。
例如,当我运行 Nexus 容器时,执行并显示运行容器的命令是"sh -c ${SONATYPE_DIR}/start-nexus-repository-manager.sh".
对于 PostgreSQL,即"docker-entrypoint.sh postgres".
要获取更多信息,我们可以在正在运行的容器上执行
docker exec CONTAINER ps aux。
它可能会打印我们可能不感兴趣的其他流程。
为了缩小到入口点启动的初始进程,我们可以这样做:
docker exec CONTAINER ps -1
Run Code Online (Sandbox Code Playgroud)
我指定1是因为入口点执行的进程通常是带有1id的进程。
没有ps,我们仍然可以在/proc/1/cmdline(在大多数 Linux 发行版中但不是全部)中找到信息。例如 :
docker exec CONTAINER cat /proc/1/cmdline | sed -e "s/\x00/ /g"; echo
Run Code Online (Sandbox Code Playgroud)
如果我们可以访问启动容器的 docker 主机,获取入口点执行的进程的完整命令的另一种替代方法是 :: executeps -PID其中 PID 是由 Docker 守护进程创建的本地进程来运行容器,例如:
ps -$(docker container inspect --format '{{.State.Pid}}' CONTAINER)
Run Code Online (Sandbox Code Playgroud)
使用 docker ps 进行用户友好的格式化
docker ps --no-trunc并不总是容易阅读。
以表格格式指定要打印的列可能会更好:
docker ps --no-trunc --format "table{{.Names}}\t{{.CreatedAt}}\t{{.Command}}"
Run Code Online (Sandbox Code Playgroud)
创建别名可能有帮助:
alias dps='docker ps --no-trunc --format "table{{.Names}}\t{{.CreatedAt}}\t{{.Command}}"'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
146145 次 |
| 最近记录: |