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

NVIDIA Jetson与x86平台Docker文件夹权限持久化差异问题

Docker文件夹权限跨构建层丢失问题(NVIDIA Jetson平台)

问题现象

在NVIDIA Jetson Orin NX(JetPack 5.1.1)上构建Docker镜像时,出现文件夹权限无法跨RUN指令层持久化的异常:

  • 执行chown -R vtc:vtc /whatever/folder/的RUN步骤中,权限显示为vtc:vtc,设置正常
  • 下一个独立的RUN步骤里,该文件夹权限自动变回root:root
  • 相同Dockerfile在x86架构Ubuntu 22.04笔记本上构建时,权限能稳定保持跨层一致

已清理所有镜像、卷并执行无缓存重建,排除了缓存、卷挂载、COPY命令等干扰因素,问题依旧存在。

复现用Dockerfile

FROM ubuntu

RUN useradd -u 1000 vtc 
RUN echo "vtc:vtc" | chpasswd 
RUN mkdir -p /whatever/folder/
RUN chown -R vtc:vtc /whatever/folder/ && ls -la /whatever/folder/
RUN ls -la /whatever/folder/

WORKDIR /whatever/folder/

ENTRYPOINT [ "bash" ]

环境信息

Jetson平台Docker版本

Client:
 Version:           20.10.25
 API version:       1.41
 Go version:        go1.18.1
 Git commit:        20.10.25-0ubuntu1~20.04.1
 Built:             Fri Jul 14 22:01:07 2023
 OS/Arch:           linux/arm64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.25
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.1
  Git commit:       20.10.25-0ubuntu1~20.04.1
  Built:            Thu Jun 29 21:55:06 2023
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.7.2
  GitCommit:        
 nvidia:
  Version:          1.1.7-0ubuntu1~20.04.1
  GitCommit:        629a689
 docker-init:
  Version:          0.19.0
  GitCommit:        

x86平台Docker版本

Client: Docker Engine - Community
 Version:           24.0.2
 API version:       1.43
 Go version:        go1.20.4
 Git commit:        cb74dfc
 Built:             Thu May 25 21:51:00 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          24.0.2
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.4
  Git commit:       659604f
 Built:            Thu May 25 21:51:00 2023
 OS/Arch:          linux/amd64
 Experimental:     false
 containerd:
  Version:          1.6.21
  GitCommit:        3dce8eb055cbb6872793272b4f20ed16117344f8
 runc:
  Version:          1.1.7
  GitCommit:        v1.1.7-0-g860f061
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

可能原因

  1. Docker版本兼容性:Jetson使用的是Ubuntu源提供的20.10.25旧版本,x86使用的是官方社区版24.0.2,旧版本可能存在arm64架构下的分层文件系统权限处理bug。
  2. NVIDIA容器运行时影响:Jetson上默认启用了nvidia容器runtime,可能在镜像层处理过程中意外覆盖了权限设置。
  3. 存储驱动差异:Jetson与x86平台的Docker存储驱动可能不同,导致权限元数据在层间同步时丢失。

解决方案尝试

方案1:合并RUN指令

将创建目录、修改权限的操作合并到同一个RUN指令中,利用Docker分层特性确保权限变更在同一层完成,避免跨层重置:

FROM ubuntu

RUN useradd -u 1000 vtc && \
    echo "vtc:vtc" | chpasswd && \
    mkdir -p /whatever/folder/ && \
    chown -R vtc:vtc /whatever/folder/

RUN ls -la /whatever/folder/

WORKDIR /whatever/folder/

ENTRYPOINT [ "bash" ]

方案2:升级Docker版本

将Jetson上的Docker升级为官方社区版(替代Ubuntu源版本),参考Docker官方arm64安装指南或NVIDIA Jetson相关文档完成升级,验证新版本是否修复该权限问题。

方案3:切换默认容器runtime

临时修改Docker daemon的默认runtime为runc,排除nvidia runtime的干扰后重新构建:

# 临时启动dockerd并指定默认runtime
sudo dockerd --default-runtime runc &
# 无缓存构建镜像
docker build --no-cache -t test-perm .

内容的提问来源于stack exchange,提问作者G. Ballegeer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:12:48