Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Docker exec command not using the mounted directory for /

Tags:

docker

I am new to docker containers and I and am trying to solve a problem I am facing right now.

These are my understanding based on limited knowledge.

When we create a docker container, Docker creates a local mount and use it as the root file system for the docker container.

Now, if I run any commands in the container from the host server using docker exec the docker is not using the mounted partition as the / file system for the container. I mean, it still pics up the binaries and env variables from the host server. Is there any option/alternate solution for making the docker use the original mounted directory for docker exec too ?

If I access/start the container with docker attach or docker run -i -t /bin/bash, I get the mounted directory as my / file system, which gives me an entirely independent environment from my host system. But this doesn't happen with the docker exec command.

Please help !!

like image 937
PHINCY L PIOUS Avatar asked Jan 22 '16 12:01

PHINCY L PIOUS


1 Answers

You are operating under a misconception. The docker image only contains what was installed in it. This is usually a very cut down version of an operating system for efficiency reasons.

The docker container is started from an image - and that's a running version, which can change and store state - but may be discarded.

docker run starts a container from an image. You can run the same image multiple times to create completely different containers (which happen to have the same starting point for their content).

docker exec attaches to one of those containers to run a command. So you will only see the things inside it that ... were inside the image, or added post start (like log files). It has no vision of the host filesystem, and may not be the same OS - the only requirement is that it shares elements of the kernel ... although it usually has a selection of the commonly used binaries.

And when you run an image to create a container, you can specify a mount. One of the options when you do this is passing through a host filesystem, with e.g. -v /path/on/host:/path_in/container. But you don't have to, you can use data containers or use a docker volume mount instead. e.g. docker run -v /mount creates a mount point within the container, using the docker filesystem, which isn't part of the parent host. This can be used to make a data container with: docker create -v /path/to/data --name data_for_acontainer some_basic_image

And then mount volumes from that data container on a new one:

docker run -d --volumes-from data_for_acontainer some_app_image 

Which will attach that data container onto the /path/to/data mount. But in neither case is the 'host' filesystem touched directly - this is the whole point of dockerising things.

like image 60
Sobrique Avatar answered Oct 23 '22 15:10

Sobrique