【发布时间】:2021-01-14 10:38:21
【问题描述】:
我正在尝试从以下 Dockerfile 构建一个简单的图像:
FROM arm32v7/ubuntu:20.04
RUN touch tmp.txt
但我收到错误 Operation not allowed
$ docker build .
Sending build context to Docker daemon 71.68kB
Step 1/2 : FROM arm32v7/ubuntu:20.04
---> bcf7edb34eae
Step 2/2 : RUN touch tmp.txt
---> Running in 686d92e86a27
touch: setting times of 'tmp.txt': Operation not permitted
这种情况发生在装有 Hypriot 操作系统的 Raspberry Pi 上,而在我的笔记本电脑上也可以正常构建(x86 和交叉构建)。
我知道这是某种权限错误,但我能够毫无问题地运行sudo 命令,因此我真的不知道该怎么办。
【问题讨论】:
-
您确定
arm32v7架构吗?现代 Raspberry Pi 单元具有 64 位处理器。尝试将“FROM”指令更改为FROM ubuntu:20.04,以便 Docker 为您选择架构。 -
是的,
getconf LONG_BIT输出 32,使用 64 位图像给出exec error,64 位正在 beta 测试中,请参阅 here -
老实说,看起来 docker 映像只是有问题。它应该设置一个工作目录,在创建文件之前肯定允许写入,例如 /tmp,显然它没有。您应该联系维护它的人。
-
该图像只是默认的 ubuntu 图像,当我在笔记本电脑上交叉构建时,它构建得很好。
-
我说的是“touch tmp.txt”命令,这显然是自定义的。执行此命令的地方很重要,docker build 在非常普通的 linux 系统中运行,例如带有 /home、/tmp 等目录的文件系统以及所有这些,您可以像在普通的完整 linux 系统上一样更改目录和使用权限。 WORKDIR 可能是您要查找的内容,或者仅在一行中使用 cd /tmp && touch tmp.txt。
标签: docker permissions hypriot