Docker 构建期间不允许执行该操作

4

我正在尝试使用以下Dockerfile构建一个简单的镜像:

FROM arm32v7/ubuntu:20.04
RUN touch tmp.txt

但是我收到了“操作不允许”的错误消息。

$ 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 OS的树莓派上发生的问题,但是相同的构建在我的笔记本电脑(x86和交叉编译)上构建得很好。
我知道这是某种权限错误,但我能够正常运行sudo命令,因此我真不知道该怎么办。

你确定要使用 arm32v7 架构吗?现代的 Raspberry Pi 设备都配备了 64 位处理器。尝试将 'FROM' 指令更改为 FROM ubuntu:20.04,这样 Docker 就会自动选择适合你的架构。 - anemyte
是的,getconf LONG_BIT 输出 32,使用 64 位镜像会出现 exec error,64 位正在进行 beta 测试,详见此处 - Gianmarco
它看起来就像是 Docker 镜像有问题。它应该在创建文件之前设置一个确保允许写入的工作目录,例如 /tmp,但显然它没有这样做。你应该联系维护者。 - E. T.
这个镜像只是默认的Ubuntu镜像,在我的笔记本电脑上交叉编译时可以正常构建。 - Gianmarco
我在谈论的是“touch tmp.txt”命令,显然这是自定义的。执行此命令的位置很重要,docker build在一个非常普通的Linux系统中运行,例如具有/home、/tmp等目录,并且您可以更改目录并像在完整的Linux系统上一样使用权限。WORKDIR可能是您正在寻找的,或者只需在一行中使用cd /tmp && touch tmp.txt。 - E. T.
啊,对不起,这是我为了调试问题而生成的虚拟文件。原始的Dockerfile更加详细,但在我尝试创建文件时仍然出现相同的问题。我不明白为什么同样的Dockerfile在笔记本电脑上可以工作。编辑:原始的Dockerfile确实使用WORKDIR将目录更改为之前创建的目录,但仍然失败。 - Gianmarco
1个回答

4

这里找到了一个解决方案,基于这个 GitHub 问题

解决方案是在 Raspberry Pi 上执行以下命令来更新 libseccomp2

wget http://ftp.us.debian.org/debian/pool/main/libs/libseccomp/libseccomp2_2.4.4-1~bpo10+1_armhf.deb
sudo dpkg -i libseccomp2_2.4.4-1~bpo10+1_armhf.deb

之后,镜像按预期构建


1
该文件不存在(已经不存在了)。我尝试了http://ftp.us.debian.org/debian/pool/main/libs/libseccomp/libseccomp2_2.5.1-1~bpo10+1_armhf.deb,它可以正常工作。 - sauerburger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接