在Windows上构建Docker镜像时解决`All files/directories will have ‘-rwxr-xr-x’ permissions`的最佳实践

45次阅读
没有评论

问题描述

在Windows主机上构建Docker镜像时,会返回以下消息:

SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double-check and reset permissions for sensitive files and directories.

解决方案

请注意以下操作可能涉及版本差异或风险,操作前请进行备份。

当从Windows主机构建Docker镜像时,会出现以上安全警告。这是因为Windows文件系统没有将文件标记为“可执行”的选项。从Windows机器构建Linux镜像会导致如果文件需要被标记为可执行,镜像将被破坏。

为了解决这个问题,Docker在从Windows客户端构建时默认将文件标记为可执行。警告的目的是让你知道这一点,并在需要时修改Dockerfile以在构建后更改或移除可执行位。

然而,从本质上讲,这意味着实际上几乎不可能真正解决这个问题。但有一些方法可以帮助缓解这个问题。

解决方法

以下是一些可能的解决方法:

  1. 手动更改权限:在构建之前,手动更改敏感文件和目录的权限,以确保它们不会被标记为可执行。这可以通过在Dockerfile中使用RUN chmod命令来实现。

  2. 在Dockerfile中更改权限:在Dockerfile中使用RUN chmod命令来显式更改文件和目录的权限。这样可以确保在构建过程中文件不会被自动标记为可执行。

  3. 将错误消息输出到stdout:在Docker 17.04及以后的版本中,Docker已经将错误消息从stderr更改为stdout。这意味着你可以更容易地捕获和处理该错误消息。

示例Dockerfile

以下是一个示例Dockerfile,演示了如何在构建过程中显式更改文件权限,以防止其被自动标记为可执行:

FROM ubuntu:latest

# 将需要的文件复制到镜像中
COPY sensitive_file /app/sensitive_file

# 显式更改文件权限,防止其被自动标记为可执行
RUN chmod 644 /app/sensitive_file

# 其他构建步骤...

在上面的示例中,我们首先将一个敏感文件复制到镜像中的/app目录。然后,我们使用RUN chmod命令将该文件的权限更改为644,这将确保文件不会被自动标记为可执行。

总结

在从Windows主机构建Docker镜像时出现的“All files/directories will have '-rwxr-xr-x' permissions”安全警告是因为Windows文件系统和Linux文件系统的差异导致的。尽管无法完全解决这个问题,但通过手动更改文件权限或在Dockerfile中显式更改权限,可以缓解这个问题。同时,Docker已经将错误消息的输出从stderr更改为stdout,使得捕获和处理错误消息变得更加方便。

请注意,解决方案可能涉及版本差异或操作风险,请在操作前确保已经进行了充分的备份和测试。

参考链接:
GitHub Issue 20397
GitHub Issue 29856

正文完