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

ARM64机器Docker容器内Root用户无法执行apt-get及文件创建求助

解决ARM64架构下Docker容器无写入权限问题

看起来你在ARM64设备(内核4.14)上运行Docker 18.09.1时,遇到了容器内权限异常的棘手问题——明明是root用户,却无法执行apt操作、不能创建文件。我帮你梳理下问题根源和可行的解决步骤:

先确认你的环境信息

  • 架构:ARM64
  • 内核版本:4.14
  • Docker版本:Docker version 18.09.1, build 4c52b90
  • 存储驱动:overlay2

问题核心分析

从你提供的mount输出能看到,容器根目录/挂载参数是rw(理论上可读写),但大量cgroup子系统被设为ro只读,同时部分proc子目录也处于只读状态。结合你遇到的Operation not permitted错误,大概率是Docker的权限限制、内核安全模块(如SELinux/AppArmor)或者老版本Docker与内核的兼容性问题导致的。

分步解决办法

1. 先尝试赋予容器更多权限启动

Docker默认会收紧容器的权限,你可以先尝试添加必要的权限重新启动容器:

docker run -it --cap-add=SYS_ADMIN ubuntu:16.04 /bin/bash

如果还是不行,可以用--privileged参数测试(注意:这个参数会给容器几乎主机级的权限,仅限排查问题,生产环境别随便用):

docker run -it --privileged ubuntu:16.04 /bin/bash

进入容器后再试试创建文件或者apt-get update,看是否恢复正常。

2. 检查Docker守护进程的默认配置

看看Docker的配置文件/etc/docker/daemon.json有没有默认开启了只读模式或者其他限制:

cat /etc/docker/daemon.json

如果里面有"read-only": true这类配置,先注释掉,然后重启Docker服务:

systemctl restart docker

之后重新启动容器测试。

3. 排查内核安全模块的影响

ARM64设备可能启用了SELinux或AppArmor,这些安全模块会限制容器的操作:

  • 检查SELinux状态:
getenforce

如果输出是Enforcing,可以临时改成Permissive模式试试:

setenforce 0

然后重启容器验证。

  • 检查AppArmor状态:
aa-status

如果AppArmor启用了且对Docker有严格的规则,可以临时禁用默认的Docker profile:

aa-disable docker-default

测试完记得恢复安全配置,别一直开着。

4. 升级Docker版本

你用的Docker 18.09.1确实比较老了,可能和内核4.14存在兼容性问题。建议升级到更稳定的新版本(比如20.10.x系列),ARM64版本可以用官方脚本安装:

curl -fsSL https://get.docker.com | sh

升级后重启Docker服务,再测试容器操作。

5. 更换容器镜像试试

有些老版本的Ubuntu 16.04 ARM镜像可能有兼容性问题,你可以试试官方维护的更新镜像,或者换用Ubuntu 18.04/20.04的ARM镜像:

docker run -it ubuntu:18.04 /bin/bash

额外排查点

如果以上方法都没用,检查下主机上Docker数据目录的权限:

ls -ld /opt/var/lib/docker

正常情况下应该是root:root拥有,权限为drwx--x--x,如果权限不对,调整后重启Docker。

内容的提问来源于stack exchange,提问作者wj.sim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:51:06