When you run a container, you attach volume with the run command as docker does not provide any option to attach a volume for a running container.
Generally you use parameter '-v' with run command to map the host directory with the container
docker run -it -p 80:80 -p 3306:3306 -v /var/www/html:/var/www/html ubuntu:18.04 /bin/bash
You want to attach the volume because you want to access the contents of host directory in the container.
If you want to attach a volume or multiple volumes to a running container, here is the solution.
1. Stop the container and cd into the container directory
cd /var/lib/docker/containers/d260db74672bf96c07536835229b1b3609c74f24ba54e4c4d0e314b24d01ae19
(long string is container id)2. Edit files configv2.json and hostconfig.json
3. Add your extra require volume settings in these two files
hostconfig.json
{"Binds":["/var/www/html:/var/www/html","/opt:/opt"],configv2.json
"MountPoints":{"/var/www/html":{"Source":"/var/www/html","Destination":"/var/www/html","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/opt/lampp/htdocs/InvoicePlane","Target":"/var/www/html/InvoicePlane"},"SkipMountpointCreation":false},"/opt":{"Source":"/opt","Destination":"/opt","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/opt","Target":"/opt"},"SkipMountpointCreation":false}},
Here we have mounted two host directories inside the container. /var/www/html and /opt of host is visible in the same directory of the container.
4. Restart Docker, start container and log into it. Host Directory content should be available in the container.
Using this method you can connect single volume or multiple volumes.
Note : You can map one directory of host in the other directory of container. Example you can map /var/www/html of host inside /opt/lampp/htdocs of docker container or vice versa.
You can see practical example in this video to understand the steps better.
Thanks
ReplyDeletemy docker already has one mountpoint. how do I add a second mountpoint
ReplyDeleteBoth are json files so you need to add comma separated values. In above example, two directories /var/www/html and /opt of host are mounted in a container.
Delete