You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker无法保留chown用户权限设置问题求助

问题分析与解决方案

根本原因

Ubuntu 22.04官方镜像默认将/home目录配置为tmpfs临时文件系统。Docker的每个RUN步骤都会启动全新的容器实例,此时/home会被重新挂载为新的tmpfs,前序步骤中对/home目录的修改(包括创建用户家目录、调整权限)无法被持久化到后续镜像层,导致后续RUN步骤里/home/docker的属主被重置为root。

解决方案

方案1:合并相关操作到同一RUN步骤

同一RUN步骤内的所有命令在同一个容器运行时执行,tmpfs不会重新挂载,所有修改会被完整保存到镜像层。修改后的Dockerfile如下:

FROM ubuntu:22.04

RUN groupadd -f -g 1000 docker \
    && useradd -ms /bin/bash docker -u 1000 -g 1000 \
    && chown docker:docker -R /home/docker \
    && ls -la /home
RUN ls -la /home

构建后,最后一步的ls输出会显示/home/docker的属主保持为docker:docker。

方案2:指定非/home路径的用户家目录

避开tmpfs挂载的/home,将用户家目录设置到其他持久化路径(比如/opt/docker):

FROM ubuntu:22.04

RUN groupadd -f -g 1000 docker \
    && useradd -ms /bin/bash docker -u 1000 -g 1000 -d /opt/docker \
    && chown docker:docker -R /opt/docker \
    && ls -la /opt
RUN ls -la /opt

此路径不在tmpfs上,权限修改会被持久化到镜像层。

方案3:禁用/home的tmpfs挂载

通过移除systemd相关配置,取消/home的临时挂载:

FROM ubuntu:22.04

RUN rm -f /etc/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup.service \
    && groupadd -f -g 1000 docker \
    && useradd -ms /bin/bash docker -u 1000 -g 1000 \
    && chown docker:docker -R /home/docker \
    && ls -la /home
RUN ls -la /home

后续RUN步骤中/home不再被重新挂载为tmpfs,修改会被保留。

内容的提问来源于stack exchange,提问作者András Fekete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:15:57