docker运行命令中的-d2标志是什么



我使用的代码库中有一个docker run命令,如下所示(删除了实名和密码(:

docker run -it --rm --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=password postgres:11.6 -d2

我知道-d标志是指--detach容器,但-d2是什么?我搞不清楚命令末尾这面旗帜的用途。我也很困惑为什么它在命令的末尾,而不是像其他标志一样在IMAGE名称之前。

docker命令行是区分顺序的。一旦docker看到一个无法解析的选项或标志,它就会将其视为图像名称。图像名称之后的所有内容都是要运行的命令,而不是默认命令。换句话说:

docker run ${options_to_run} ${image_name} ${command_override}

在postgres映像中,入口点是docker-entrypoint.sh,默认命令是postgres。这意味着docker默认情况下将以docker-entrypoint.sh postgres的形式运行这个容器(它将入口点和命令连接到一个带有要运行的args的命令中(。有了-d2命令覆盖,它就变成了docker-entrypoint.sh -d2,入口点脚本可以将其解释为更改其运行方式的选项。入口点对标志有特殊处理:

if [ "${1:0:1}" = '-' ]; then
set -- postgres "$@"
fi
....
exec "$@"

这意味着入口点参数从-d2修改为postgres -d2,然后pid 1中的shell被命令行参数取代,postgres-d2参数一起运行。

我找到了答案。-d2是用于指定调试级别的postgresCLI选项。我们正在使用postgresCLI选项执行postgres容器。

来自postgres --help:

-d 1-5             debugging level

最新更新