37

我们如何在 docker history 命令的输出中看到第三列(创建者)中的完整命令?

$ docker history docker.company.net/docker-base-images/image:1.0

IMAGE               CREATED             CREATED BY                                      SIZE
c0bddf343fc6        7 days ago          /bin/sh -c #(nop)  LABEL com.company.build.r…   0B                  
<missing>           7 days ago          /bin/sh -c #(nop)  ARG commit                   0B                  
<missing>           7 days ago          /bin/sh -c #(nop)  ARG date                     0B                  
<missing>           7 days ago          /bin/sh -c #(nop)  ARG repo                     0B                  
<missing>           7 days ago          /bin/sh -c #(nop)  ARG org                      0B                  
<missing>           7 days ago          /bin/sh -c #(nop)  ARG version                  0B                  
<missing>           7 days ago          /bin/sh -c #(nop)  USER [company]               0B                  
<missing>           7 days ago          /bin/sh -c apk --no-cache add openjdk8-jre-b…   72.2MB              
<missing>           7 days ago          /bin/sh -c #(nop)  USER [root]                  0B                  
<missing>           7 days ago          /bin/sh -c #(nop)  USER [company:company]       0B                  
<missing>           7 days ago          |5 commit=d64d27b07439e6cfff7422acafe440a946…   3.92MB              
<missing>           7 days ago          /bin/sh -c #(nop)  LABEL com.company.build.r…   0B                  
<missing>           7 days ago          |5 commit=d64d27b07439e6cfff7422acafe440a946…   4.85kB              
<missing>           7 days ago          /bin/sh -c #(nop)  ARG commit                   0B                  
<missing>           7 days ago          /bin/sh -c #(nop)  ARG date                     0B                  
<missing>           7 days ago          /bin/sh -c #(nop)  ARG repo                     0B                  
<missing>           7 days ago          /bin/sh -c #(nop)  ARG org                      0B                  
<missing>           7 days ago          /bin/sh -c #(nop)  ARG version                  0B                  
<missing>           5 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B                  
<missing>           5 weeks ago         /bin/sh -c #(nop) ADD file:88875982b0512a9d0…   5.53MB              

第三列 (CREATED BY) 是命令的缩写,这使得重建原始 Dockerfile 变得困难。是否可以在第三列中获得完整的命令?

谢谢阅读。

4

2 回答 2

44

您可以添加标志--no-trunc以查看完整的命令。

于 2019-04-17T23:56:36.047 回答
10

出于调试目的,我需要以表格格式查看完整的构建历史,而无需截断构建步骤。Docker Docs 示例通常不完整(或不存在)。@Alassane_Hdiaye 接受的答案可以工作,但如果在错误的地方使用会引发错误。经过几次尝试,我得到了 GoLang 模板表格格式化程序来生成我需要的结果。

Docker GoLang 模板--format选项适用于docker history,但必须在之后输入--format,因为它修改--format, NOT docker history。该docker history命令仅接受 1 个参数。该--format选项更改 的输出docker history,并--no-trunc修改--format选项。

命令序列必须是

docker history <image-id> --format <GoLang template spec> --no-trunc

--no-trunc选项--format位于命令行后面,因为它修改了该--format选项。


因此,对于表格格式的完整历史记录:

docker history <image-id> --format "table{{.ID}}, {{.CreatedBy}}" --no-trunc

输出很乱,因为 Dockerfile RUN 命令可以换行很多行。

因此,将结果通过管道传输到 CSV 文件并在 Excel 中打开它(因为缺少更好的表格查看器)。

docker history <image-id> --format "table{{.ID}}, {{.CreatedBy}}" --no-trunc > image-id-history.csv

所以现在我可以在 Excel 中看到完整的构建指令而不会被截断。


作为旁注,Docker history不输出 RUN 和其他 dockerfile 构建关键字,但可以推断出这些。但至少完整历史记录中的完整命令可用。

于 2020-03-15T19:54:58.883 回答