Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请参阅Docker中运行/停止容器的完整命令_Docker - Fatal编程技术网

请参阅Docker中运行/停止容器的完整命令

请参阅Docker中运行/停止容器的完整命令,docker,Docker,如何在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 minut

如何在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
我只能看到“nginx-g的守护进程”。。此处不是完整的命令。

使用:

docker inspect -f "{{.Name}} {{.Config.Cmd}}" $(docker ps -a -q)
docker inspect -f "{{.Path}} {{.Args}} ({{.Id}})" $(docker ps -a -q)
。。。它对所有容器执行“docker inspect”(docker inspect)。

docker ps——没有trunc
将显示完整命令以及运行容器的其他详细信息。

使用:

docker inspect -f "{{.Name}} {{.Config.Cmd}}" $(docker ps -a -q)
docker inspect -f "{{.Path}} {{.Args}} ({{.Id}})" $(docker ps -a -q)

这将显示命令路径和参数,类似于git repository中的
docker ps

使用runlike

安装runlike

pip install runlike
由于它接受容器id作为参数,所以要提取容器id,请使用以下命令

docker ps -a -q
您可以使用runlike通过以下命令提取完整的docker run命令

runlike <docker container ID>
runlike

将迪伦的评论转换成完整的答案,因为太有用了:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike YOUR-CONTAINER

它有什么作用?在容器内运行,获取完整的docker运行命令,然后为您删除容器。

TL-DR

docker ps--no trunc
docker inspect CONTAINER
提供启动容器时执行的入口点,以及传递给的命令,但这可能会遗漏一些部分,例如
${ANY_VAR}
,因为容器环境变量未按解析方式打印

为了克服这一点,
docker inspect CONTAINER
有一个优势,因为它还允许从
Config.env
属性中分别检索容器中定义的环境变量及其值

docker ps
docker inspect
提供有关已执行入口点及其命令的信息。通常,这是一个包装器入口点脚本(
.sh
),而不是容器启动的“真实”程序。要获取相关信息,请使用
ps
/proc/1/cmdline
帮助请求流程信息


1)
docker ps——无trunc

它打印入口点和为所有正在运行的容器执行的命令。 当它打印传递到入口点的命令时(如果我们传递该命令),它不会显示docker环境变量的值(例如
$FOO
${FOO}
)。
如果我们的容器使用env变量,这可能是不够的

例如,运行alpine容器:

docker run --name alpine-example -e MY_VAR=/var alpine:latest sh -c 'ls $MY_VAR'
docker inspect alpine-example | grep -4 Cmd
使用docker-ps时,例如:

docker ps-a--filter name=alpine示例--no trunc

它打印:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5b064a6de6d8417... alpine:latest "sh -c 'ls $MY_VAR'" 2 minutes ago Exited (0) 2 minutes ago alpine-example
        "Env": [
            "MY_VAR=/var",
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
        "Cmd": [
            "sh",
            "-c",
            "ls $MY_VAR"
        ]
命令也在那里,但我们仍然看不到env变量值:

        "Cmd": [
            "sh",
            "-c",
            "ls $MY_VAR"
        ],
事实上,我们无法使用这些docker命令查看插值变量。
作为权衡,我们可以使用docker inspect分别显示容器的command和env变量:

docker inspect  alpine-example  | grep -4 -E "Cmd|Env"
上面印着:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5b064a6de6d8417... alpine:latest "sh -c 'ls $MY_VAR'" 2 minutes ago Exited (0) 2 minutes ago alpine-example
        "Env": [
            "MY_VAR=/var",
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
        "Cmd": [
            "sh",
            "-c",
            "ls $MY_VAR"
        ]
docker的另一种方法是使用
docker inspect
--format
标志,该标志允许指定要呈现的JSON属性:

docker inspect --format '{{.Name}} {{.Config.Cmd}}  {{ (.Config.Env) }}'  alpine-example
这将产生:

/alpine-example [sh -c ls $MY_VAR] [MY_VAR=/var PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin] 我指定
1
,因为入口点执行的进程通常是具有
1
id的进程

如果没有
ps
,我们仍然可以在
/proc/1/cmdline
中找到信息(在大多数Linux发行版中,但不是全部)。例如:

docker exec CONTAINER cat /proc/1/cmdline | sed -e "s/\x00/ /g"; echo    
如果我们可以访问启动容器的docker主机,那么获取入口点执行的进程的完整命令的另一个替代方法是: :执行
ps-PID
,其中PID是Docker守护进程创建的本地进程,用于运行容器,例如:

ps -$(docker container inspect --format '{{.State.Pid}}'  CONTAINER)

使用docker ps进行用户友好的格式设置

docker ps--no-trunc
并不总是容易阅读。
以表格格式指定要打印的列可能会更好:

docker ps   --no-trunc  --format "table{{.Names}}\t{{.CreatedAt}}\t{{.Command}}"
创建别名可能有助于:

alias dps='docker ps   --no-trunc  --format "table{{.Names}}\t{{.CreatedAt}}\t{{.Command}}"'

谢谢,这帮了大忙。请注意:“-notrunc”已被弃用,替换为
--no trunc
。这对我不起作用。它给了我命令,但不是所有的开关(这是我在使用“完整命令”时想到的)。上面提到的其他链接的runlike命令对我来说更有效。对于仅运行容器的完整命令,只需删除all命令<代码>docker ps--无trunc谢谢--已更正。我以前的命令适用于所有容器,而不只是运行容器,这是最初的问题。不受信任的命令可能很长,每行只能看到前400个字符,带有
docker ps--all--no trunc | cut-c-400
这不显示docker ps命令。docker ps命令对应于docker inspect Path和Args.No bueno(截至2018年1月i.e.)
docker-inspect-f“{{.Name}{{.Path}{.Args}}{{.Args}}$(docker-ps-a-q)
如果您只是在命令前面抛出
sudo
,您将得到
“docker-inspect”至少需要一个参数。
由于第二次调用是为了获取所有容器名称,您可能需要在
中添加一个sudo$(
。对于那些想要更好地理解-f查询的人,我在这里找到了一个很好的解释,您如何修改它来搜索特定的命令,例如
kube apiserver
?@Jonathan
docker inspect-f{{.Path}{.Args}({.Id})$(docker ps-a-q)| grep kube apiserver
请参见此处:不工作。显示“命令”['docker','inspect',u'06e6a369f909']'返回非零退出状态1”您是否安装了我提到的runlike即使更好,您也可以在docker容器中运行runlike并避免安装它:
docker-run--rm-v/var/run/docker.sock:/var/run/docker.sock/runlike-YOUR-container