Docker:可以从生成的图像中恢复在单个 运行 命令中创建和删除的秘密吗?

Docker: Can a secret created and deleted in a single RUN command be recovered from the resulting image?

我想在 docker 构建过程中使用一些密钥。所以我有了将这些键作为构建参数注入构建过程的想法。这应该是安全的。 official documentation states:

Also, these values don’t persist in the intermediate or final images like ENV values do.

这是 Dockerfile 的示例:

FROM ubuntu:latest
ARG key
...
RUN echo $key > /tmp/key && doSomethingWithKey && rm /tmp/key
...

如您所见,有一次我需要将此密钥粘贴到一个文件中。为确保此密钥不会 "baked" 进入最终图像,我立即删除了密钥。

这是构建命令:

$ docker build --build-arg key="secret" .

现在我的问题是:这是否安全,或者密钥是否在最终图像中得到 "stored"?

密钥不会存储在文件系统中,但会存储在图层元数据中,您可以在图像上使用 docker history 查看。因此我建议不要这样做。

我最常看到此请求是从私人存储库中检出代码,其中在构建中使用了该存储库的登录名。如果是这种情况,您应该在构建命令之前签出代码,然后从 Dockerfile 中对签出的代码执行 COPY

经过验证的回应:它确实在最终图像中保留了秘密值。

FROM alpine

ARG key
ARG securekey

RUN echo $key > /tmp/key
RUN echo $securekey > /tmp/securekey && rm /tmp/key


docker build . \
    --build-arg key=mykey-isnotsecure \
    --build-arg securekey=mykey-issecure -t test

使用 docker save 转储图像:

docker save test | strings | grep -o mykey............    

输出:

mykey-isnotsecure
mykey-issecure","
mykey-isnotsecure
mykey-isnotsecure
mykey-issecure","

正如 BMitch 所说:

docker history --no-trunc test
IMAGE                                                                     CREATED             CREATED BY                                                                                                     SIZE                COMMENT
sha256:e013810c5be50cffa0d9b5e723ec548cdcc686d99efdf792b2bda90baa0795c8   3 hours ago         |2 key=mykey-isnotsecure securekey=mykey-issecure /bin/sh -c echo $securekey > /tmp/securekey && rm /tmp/key   15 B
sha256:cabafd664056bc90ea9d71fafcdb65e4abe3d98a66c75066218fcf9a88962ba1   3 hours ago         |2 key=mykey-isnotsecure securekey=mykey-issecure /bin/sh -c echo $key > /tmp/key                              18 B
sha256:699ff2abecb92b13169a669d99c64fcc19c8d44590778c7b7ee944559208e81a   3 hours ago         /bin/sh -c #(nop)  ARG securekey                                                                               0 B
sha256:26aaa6f92951accc5cb21a13900f9cabee58f65119ffb0eb4b546c3ea19b3ce1   3 hours ago         /bin/sh -c #(nop)  ARG key                                                                                     0 B
sha256:a41a7446062d197dd4b21b38122dcc7b2399deb0750c4110925a7dd37c80f118   4 days ago          /bin/sh -c #(nop)  CMD ["/bin/sh"]                                                                             0 B
<missing>                                                                 4 days ago          /bin/sh -c #(nop) ADD file:ce33aabbc5f370e58ebe911e081ce093e3df18d689c2d5a5d092c77973f62a54 in /               3.97 MB

编辑。关于 事件的免责声明。

我的 Mac:

▶ date
Tue May 30 16:45:39 ART 2017

我的容器是 3 小时轮班(ART 与 UTC):

~
▶ docker run ubuntu date
Tue May 30 16:27:29 UTC 2017

ART == UTC-3