Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove a mount for existing container?

I'm learning docker and reading their chapter "Manage data in containers". In the "Mount a host directory as a data volume". They mentioned the following paragraph:

In addition to creating a volume using the -v flag you can also mount a directory from your Docker engine’s host into a container.

$ docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

This command mounts the host directory, /src/webapp, into the container at /opt/webapp. If the path /opt/webapp already exists inside the container’s image, the /src/webapp mount overlays but does not remove the pre-existing content. Once the mount is removed, the content is accessible again. This is consistent with the expected behavior of the mount command.

Experiment 1

Then when I tried to run this command and try to inspect the container, I found that that actually container doesn't even run. Then I use docker logs web and find this error:

can't open file 'app.py': [Errno 2] No such file or directory I assume that the /src/webapp mount overlays on the /opt/webapp, which there is no content.

Question 1 How can I remove this mount and check if the content is still there as the quote said?

Experiment 2

When I tried to run $ docker run -d -P --name web2 -v newvolume:/opt/webapp training/webapp python app.py I found that the container ran correctly. Then I use docker exec -it web2 /bin/bash and find that all of the existing content are still inside the /opt/webapp. I can also add more files inside here. So in this case, it looks like that the volume is not overlay but combined. If I use docker inspect web and check Mounts, then I'll see that the volume is created under /var/lib/docker/volumes/newvolume/_data

Question 2 If I give a name instead of a host-dir absolute path, then the volume will not overlay the container-dir /opt/webapp but connect the two dir together?

like image 981
Zingoer Avatar asked Nov 20 '22 19:11

Zingoer


1 Answers

An alternative solution is to commit the container (or export it) using docker cli and re-create it without doing the mapping.

like image 162
ans1genie Avatar answered Dec 05 '22 16:12

ans1genie