Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to access files in host from a Docker Container?

I have a Docker Ubuntu bionic container on A Ubuntu server host. From the container I can see the host drive is mounted as /etc/hosts which is not a directory. Tried unmounting and remounting on a different location but throws permission denied error, this happens when I am trying as root. So How do you access the contents of your host system ?

like image 382
Just Khaithang Avatar asked Mar 11 '19 14:03

Just Khaithang


People also ask

Can docker container access host files?

Yes, you can configure host filesystem access in your docker containers. I assume you're also asking about access aside from the fact that docker will use the host operating systems file systems by default as that's where you're storing your docker containers and images.

How do I retrieve a file from a container?

Obtain the name or id of the Docker container. Issue the docker cp command and reference the container name or id. The first parameter of the docker copy command is the path to the file inside the container. The second parameter of the docker copy command is the location to save the file on the host.


3 Answers

Firstly, etc/hosts is a networking file present on all linux systems, it is not related to drives or docker.

Secondly, if you want to access part of the host filesystem inside a Docker container you need to use volumes. Using the -v flag in a docker run command you can specify a directory on the host to mount into the container, in the format:

-v /path/on/host:/path/inside/container

for example:

docker run -v /path/on/host:/path/inside/container <image_name>
like image 90
JShorthouse Avatar answered Sep 17 '22 02:09

JShorthouse


Docker directly manages the /etc/hosts files in containers. You can't bind-mount a file there.

Hand-maintaining mappings of host names to IP addresses in multiple places can be tricky to keep up to date. Consider running a DNS server such as BIND or dnsmasq, or using a hosted service like Amazon's Route 53, or a service-discovery system like Consul (which incidentally provides a DNS interface).

If you really need to add entries to a container's /etc/hosts file, the docker run --add-host option or Docker Compose extra_hosts: setting will do it.

As a general rule, a container can't access the host's filesystem, except to the extent that the docker run -v option maps specific directories into a container. Also as a general rule you can't directly change mount points in a container; stop, delete, and recreate it with different -v options.

like image 40
David Maze Avatar answered Sep 17 '22 02:09

David Maze


Example. container id: 32162f4ebeb0

#HOST BASH SHELL

docker cp 32162f4ebeb0:/dir_inside_container/image1.jpg /dir_inside_host/image1.jpg


docker cp /dir_inside_host/image1.jpg  32162f4ebeb0:/dir_inside_container/image1.jpg 


like image 34
quine9997 Avatar answered Sep 20 '22 02:09

quine9997