发布于 2026-01-06 2 阅读
0

您正在构建 Docker 镜像吗?以下是如何避免将敏感信息泄露到 Docker 镜像中的方法。DEV 全球展示挑战赛,由 Mux 呈现:展示您的项目!

您正在构建 Docker 镜像吗?以下是如何避免将敏感信息泄露到 Docker 镜像中的方法。

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

这条技巧是“你应该遵循的十大 Docker 镜像安全最佳实践”系列文章的一部分。感谢阅读,也感谢与我共同完成这篇文章的Omer Levi Hevroni 。

有时,在 Docker 镜像中构建应用程序时,您需要一些秘密信息,例如 SSH 私钥,才能从私有存储库中拉取代码;或者您需要一些令牌来安装私有软件包。

如果将它们复制到 Docker 中间容器中,即使之后删除它们,它们也会缓存到添加它们的层上。这些令牌和密钥必须保存在容器外部Dockerfile

使用多阶段构建

利用 Docker 对多阶段构建的支持,在中间镜像层中获取和管理密钥,然后将其丢弃,这样就不会有敏感数据到达镜像构建层。

使用代码向所述中间层添加密钥,例如以下示例:

FROM: ubuntu as intermediate

WORKDIR /app
COPY secret/key /tmp/
RUN scp -i /tmp/key build@acme/files .

FROM ubuntu
WORKDIR /app
COPY --from=intermediate /app .
Enter fullscreen mode Exit fullscreen mode

使用 Docker 秘密命令

使用 Docker 的 alpha 版本功能来管理密钥,以便在不缓存敏感文件的情况下挂载它们,类似于以下示例:

# syntax = docker/dockerfile:1.0-experimental
FROM alpine

# shows secret from default secret location
RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecre

# shows secret from custom secret location
RUN --mount=type=secret,id=mysecret,dst=/foobar cat /foobar
Enter fullscreen mode Exit fullscreen mode

注意递归复制

在将文件复制到正在构建的镜像中时,也应该格外小心。

例如,以下命令会将整个构建上下文文件夹递归复制到 Docker 镜像中,这可能会导致敏感文件也被复制:

COPY . .
Enter fullscreen mode Exit fullscreen mode

如果您的文件夹中有敏感文件,请将其删除或使用.dockerignore忽略选项:

private.key
appsettings.json
Enter fullscreen mode Exit fullscreen mode

原文博客文章包含一个高分辨率可打印的PDF文件,就像您在下方看到的片段一样。快来看看吧!

文章来源:https://dev.to/lirantal/are-you-building-docker-images-here-s-how-to-avoid-leaking-sensitive-information-into-docker-images-99g