Docker容器中无法更改文件和文件夹的所有权

30次阅读
没有评论

问题描述

在使用Docker容器时,用户遇到了一个问题。他在两个Dockerfile中都添加了命令RUN chown -R www-data:www-data /var/www/html,以将所有权更改为www-data用户。尽管容器似乎成功构建且没有错误,但是当他在运行中的PHP容器中执行ls -la命令查看工作目录时,仍然可以看到所有文件和文件夹的所有权属于root用户。然而,在本地环境中在容器外运行ls -la命令,他可以看到这些文件和文件夹的所有权归属于他的用户名和staff组。

他想知道如何确保容器内的文件和文件夹所有权归属于www-data用户。

解决方案

请注意以下操作可能涉及版本差异及风险,请在操作前做好备份。

为了确保容器内的文件和文件夹所有权正确地归属于www-data用户,您可以采取以下措施:

方案1:确保www-data用户存在

在Docker容器中,确保www-data用户存在是重要的。您可以参考Docker官方的httpd镜像中的做法,添加一个与www-data用户相关的配置。例如,在您的Dockerfile中添加以下代码段:

# 确保 www-data 用户存在
RUN set -x \
    && adduser -u 82 -D -S -G www-data www-data
# 这里的 82 是 Alpine 中 "www-data" 用户的标准 UID/GID

方案2:调试现有配置

如果您想先了解容器内现有的情况,可以执行以下步骤来查看www-data用户的存在和信息:

  1. 在Dockerfile中添加以下代码,以更新软件包列表并安装grep工具:
# 更新软件包列表并安装 grep
RUN apk update && apk add --no-cache grep
  1. 在容器内部执行以下命令,以查看www-data用户所在的组以及其存在情况:
# 查看 www-data 用户所在的组
grep ^www-data /etc/group
# 查看 www-data 用户是否存在
grep ^www-data /etc/passwd

注意事项

  • 在Docker容器内部运行的命令可能会因基础镜像的不同而有所不同,您可能需要根据实际情况进行微调。
  • 确保您在使用这些命令时充分了解其功能,以避免意外的操作。

总结

通过确保www-data用户的存在以及适当的所有权更改,您可以解决在Docker容器中文件和文件夹所有权的问题,从而确保文件和文件夹正确归属于www-data用户。在执行操作之前,请务必备份重要数据,以防止意外情况的发生。

正文完