Docker在构建映像时无法删除文件

时间:2017-03-01 09:03:54

标签: docker

我的DockerFile包含以下指令:

rm -f plugins.7z

此命令在早期版本的docker中按预期工作,但在版本1.13时失败。我看到了错误:

cannot access plugins.7z: No such file or directory

如果我打开带有基本映像的容器并手动执行命令,我会看到同样的错误。

尝试列出文件夹内容显示:

# ls -lrt
  ls: cannot access plugins.7z: No such file or directory
  total 12
  ???????????   ? ?          ?             ?            ? plugins.7z

这未列为Docker Issues中的已知问题。如何进一步调试问题?

编辑:

  1. 出于IP原因,我无法在此发布完整的Dockerfile。此外,它可能没有必要。正如我所提到的,即使手动运行容器并尝试执行命令
  2. ,我也可以模拟该问题
  3. 该文件在我尝试删除之前存在
  4. 我在问题列表中没有类似的错误我错了。这是one
  5. 问题可能与该文件无关。删除文件夹中的其他文件/文件夹也会使它们出现?权限
  6. 执行操作的用户是root

2 个答案:

答案 0 :(得分:3)

删除目录失败的原因是后备(xfs)文件系统未使用d_type支持格式化(" ftype = 1");你可以在github找到一个讨论; https://github.com/docker/docker/issues/27358

要验证系统上是否有d_type支持,请检查docker info的输出;

Server Version: 1.13.1
Storage Driver: overlay
 Backing Filesystem: xfs
 Supports d_type: false
Logging Driver: json-file

此要求也在release notes for RHEL/CentOS

中描述
  

请注意,必须在启用-n ftype=1选项的情况下创建XFS文件系统,以用作叠加层。使用rootfs和系统安装期间创建的任何文件系统,在Anaconda kickstart中设置--mkfsoptions=-n ftype=1参数。在安装后创建新文件系统时,请运行# mkfs -t xfs -n ftype=1 /PATH/TO/DEVICE命令。要确定现有文件系统是否有资格用作叠加层,请运行# xfs_info /PATH/TO/DEVICE | grep ftype命令以查看是否已启用ftype=1选项。

要解决此问题,请<; p>

  • 使用ftype=1
  • 重新格式化设备
  • 使用其他存储驱动程序。请注意,不建议将默认设备映射器配置(使用环回设备)用于生产用途,因此需要手动配置。

为了向后兼容(较旧版本的docker允许在没有d_type的系统上运行覆盖),docker 1.13只会在守护程序日志中记录警告https://github.com/docker/docker/pull/27433) ,但将来的版本将不再支持。

答案 1 :(得分:0)

能够解决问题。

1.13的change log表示

"IMPORTANT: On Linux distributions where devicemapper was the default
storage driver, the overlay2, or overlay is now used by default 
(if the kernel supports it)."

所以我尝试放回devicemapper,它现在按预期工作。