Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dockerfile "rm -Rf" fail

Tags:

docker

I have a very simple dockerfile, with "rm -Rf" to remove installation files after installation, but I got some error like:

Step 4/4 : RUN rm -Rf /INSTALLATION
 ---> Running in 19fe828f3c9d
rm: cannot remove '/INSTALLATION/Subsystems/Common': Directory not empty
rm: cannot remove '/INSTALLATION/Subsystems/EMS': Directory not empty

I run all with root user.

My dockerfile:

FROM centos
COPY INSTALLATION/ /INSTALLATION/ 
RUN  rm -Rf /INSTALLATION

My OS is centos7, and host OS is RHLE 7.

Docker info

[root@snap460c03 1]# docker info
Containers: 53
 Running: 27
 Paused: 0
 Stopped: 26
Images: 19
Server Version: 1.13.0
Storage Driver: overlay
 Backing Filesystem: xfs
 Supports d_type: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins: 
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 03e5862ec0d8d3b3f750e19fca3ee367e13c090e
runc version: 2f7393a47307a16f8cee44a37b262e8b81021e3e
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-229.el7.x86_64
Operating System: Red Hat Enterprise Linux Server 7.1 (Maipo)
OSType: linux
Architecture: x86_64
CPUs: 24
Total Memory: 94.41 GiB
Name: snap460c03
ID: T3ST:6DXJ:SDST:3W3J:Z4NB:UXF7:HGSZ:A3WH:ELHX:GVZW:APTD:7ZEK
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Http Proxy: http://16.85.88.10:8080/
No Proxy: docker-registry
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 docker-registry:5000
 127.0.0.0/8
Live Restore Enabled: false

I also tried new a container and try it manually, but the result is error too:

[root@devvm13 1]# docker run -it e20c9c5ffa8a /bin/bash

[root@f3efa193700d /]# rm -Rf /INSTALLATION/Subsystems/Common/*

[root@f3efa193700d /]# rm -Rf /INSTALLATION/Subsystems/Common 

rm: cannot remove '/INSTALLATION/Subsystems/Common': Directory not empty

You can see the second rm is fail, I tried rmdir, the resule is error too.

While I ls the directory, it show:

ls /INSTALLATION/Subsystems/Common
ls: cannot access /INSTALLATION/Subsystems/Common/eium-license.config: No such file or directory
ls: cannot access /INSTALLATION/Subsystems/Common/install_jdk.sh: No such file or directory
eium-license.config  install_jdk.sh

You can it said no such file but follow with files.

like image 919
Bo Wang Avatar asked Feb 12 '17 03:02

Bo Wang


2 Answers

I had the same issue, after spending few hours found this issue :- https://github.com/docker/docker/issues/27358

So Long story short, here is how I fixed it.

When you do a docker info, in your output you have Storage Driver: overlay, I had the same, what I did was changing overlay to devicemapper. Follow the instructions showed here - https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#configure-docker-with-the-devicemapper-storage-driver

You will have to stop and start the docker service also.

Note : Once you change you will loose all your past images, means you will not see any images/containers when you type docker images or docker ps. They will be there in fileSystem they will take disk space. So you will have to manually delete that directory, so it will be under /var/lib/docker/overlay.

like image 131
Harshil Shah Avatar answered Sep 28 '22 08:09

Harshil Shah


This is your issue:

Supports d_type: false

You are probably facing this: https://github.com/moby/moby/issues/31283

You will need to reformat the xfs file system like:

mkfs -t xfs -n ftype=1 -f /path/to/device

(we needed the force option somehow).

More info: https://docs.docker.com/engine/userguide/storagedriver/overlayfs-driver/

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/7.2_Release_Notes/technology-preview-file_systems.html

like image 21
Vincent Gerris Avatar answered Sep 28 '22 08:09

Vincent Gerris