How to delete a directory in docker?

It seems that rm -rfin the docker container it only works with files.

docker run ubuntu /bin/bash -c 'sudo rm  -rf ./mydir; ls'

it lists mydiramong directories without printing any errors.

I am using ubuntu 14.04 for the host and image.

EDIT:

I thought that the error appeared after I added another file to the directory, but I was mistaken. Finally, changing the storage driver helped solve the problem.

+5
source share
3 answers

If you cannot delete the directory, here are two options:

  • . docker run , , -, , .
  • Aufs / . docker info, , aufs imagemapper. imagemapper: , tar , docker.io, lxc-docker ppa, docs /etc/default/docker DOCKER_OPTS="--storage-driver=devicemapper"

, , - , , - . , .

Docker , - .
, docker history <image>, , .

, , , , .

mystuff ubuntu:14.04 , , rm -rf/opt:

$ docker run -it ubuntu:14.04 /bin/bash
root@435e68479c5b:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@435e68479c5b:/# exit
$ docker commit 435e6 mystuff

(-t ):

docker run -t mystuff ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

/opt ( , ):

docker run -t mystuff rm -rf /opt

, !!! (, ):

docker run -t mystuff ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

?

  • , docker run mystuff, mystuff
  • ,

, :

docker ps -a
... lots of stuff...
e9e8be13d928        mystuff:latest              "rm -rf /opt"          2 minutes ago        Exited (0) 2 minutes ago                                  nostalgic_archimedes    

tarball opt, grep dir, opt, !:

docker export e9e8 | tar tv | grep ^opt

: e9e8 . , docker ps .

, rm -rf noopt:

docker commit e9e8 noopt

, noopt:

docker run -t noopt ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  proc  root  run  sbin  srv  sys  tmp  usr  var

, , opt !

, noopt / , :

docker history noopt
IMAGE               CREATED             CREATED BY                                      SIZE
bc4e69f9e871        59 minutes ago      rm -rf /opt                                     0 B
d198d23dab38        About an hour ago   /bin/bash                                       3 B
04c5d3b7b065        9 days ago          /bin/sh -c #(nop) CMD [/bin/bash]               0 B
d735006ad9c1        9 days ago          /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/   1.895 kB
70c8faa62a44        9 days ago          /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic   194.5 kB
c7b7c6419568        9 days ago          /bin/sh -c #(nop) ADD file:d4aab24fc178303dc0   192.5 MB
511136ea3c5a        18 months ago                                                       0 B

, /opt , d198d...

docker run -t d198d23dab38 ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

:

  • .
    • .
    • , , git
    • , ( )

Docker , . , script docker build Dockerfile

+6

, rm -r -f

0

"to_remove" /

docker exec -t <container_name/container_id> /bin/sh 'rm -rf to_remove'

To remove files from the to_remove directory from the container

docker exec -t <container_name/container_id> /bin/sh 'rm -rf to_remove/<file_name>'

Delete all files from to_remove directory from container

docker exec -t <container_name/container_id> /bin/sh 'rm -rf to_remove/<file_name>'

Delete the "to_remove" directory from the container from / path / target_dir /

not tested

docker exec -t <container_name/container_id> /bin/sh 'rm -rf /path/target_dir/to_remove/'
0
source

Source: https://habr.com/ru/post/1568918/


All Articles