【问题标题】:Operation not permitted during docker builddocker build 期间不允许操作
【发布时间】: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


【解决方案1】:

找到了解决方案here,基于this GitHub issue

解决方案是更新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

然后,图像按预期构建

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 2017-03-20
  • 1970-01-01
相关资源
最近更新 更多