Where is /var/lib/docker on Mac/OS X
MacosDockerDocker for-MacMacos Problem Overview
I´m looking for the folder /var/lib/docker
on my Mac after installing docker for Mac.
With docker info
I get
Containers: 5
...
Server Version: 1.12.0-rc4
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 339
Dirperm1 Supported: true
...
Name: moby
ID: LUOU:5UHI:JFNI:OQFT:BLKR:YJIC:HHE5:W4LP:YHVP:TT3V:4CB2:6TUS
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
....
But I don´t have a directory /var/lib/docker
on my host.
I have checked /Users/myuser/Library/Containers/com.docker.docker/
but couldn´t find anything there. Any idea where it is located?
Macos Solutions
Solution 1 - Macos
As mentioned in the above answers, you will find it in:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
Once you get the tty running you can navigate to /var/lib/docker
Solution 2 - Macos
As of 2021 is the dance going, Mac Users get easily to the VM with the documented methods, and hence to the volumes.
There's a way Rocky Chen found to get inside the VM in Mac. With this you can actually inspect the famous /var/lib/docker/volumes
.
docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
Let examine the method:
- -it goes for Keep STDIN open even if not attached + Allocate pseudo-TTY
- --privileged "gives all capabilities to the container. Allows special cases like running docker" .
- --pid defines to use the host VM namespace.
- debian the actual image to use.
- nsenter a debian's tool to run programs in different namespaces
- -t is the target PID
- -m mount the provided PID namespace.
- -u enter the Unix Time Sharing (UTS) namespace.
- -n enter the provided PID network namespace.
- -i enter the provided PID IPC namespace.
Once run, go to /var/lib/docker/volumes/
and you'll find your volumes.
The next question to address for me is:
How to take those volumes and back them up in the host?
I appreciate ideas in the comments!
UPDATE FOR VSCODE USERS
If you downloaded the Official Docker extension, sun will shine for you.
Just inspect the volumes in Visual Studio Code. Right-click the files you want to have in your local, and download them. That easy!
2nd UPDATE
As of July 2021, Docker Desktop for Mac is announcing we will be able to access volumes directly from the GUI, but only for Pro and Team accounts.
Solution 3 - Macos
The other answers here are outdated if you're using Docker for Mac.
Here's how I was able to get into the VM. Run the command:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
This is the default path, but you may need to first do:
cd ~/Library/Containers/com.docker.docker/Data/vms
and then ls
to see which directory your VM is in and replace the "0" accordingly.
When you're in, you might just see a blank screen. Hit your "Enter" key.
This page explains that to exit from the VM you need to "Ctrl-a" then "d"
Solution 4 - Macos
See this answer
When using Docker for Mac Application, it appears that the containers are stored within the VM located at:
>~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Solution 5 - Macos
Just as @Dmitriy said:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
and can use ctrl a
+ d
to detach the screen
and use screen -dr
to re-attach the screen again(since if you simply attach screen again, the terminal text will be garbled.)
or if you want to exit, use ctrl + a
+ k
,then choose y
to kill the screen.
Solution 6 - Macos
some what of a zombie thread but as I just found it here is another solution that doesn't need screen nor messes up shell etc.
The path listed from a docker volume inspect <vol_name>
returns the path for the container, something like:
"Mountpoint": "/var/lib/docker/volumes/coap_service_db_data/_data"
the _data
component being the last component of the path you setup in the volumes:
section of the service using a given volume eg:
volumes: - db_data:/var/lib/postgresql/data
, obvs your mileage will vary.
To get there on the mac the easiest method I have found is to actually start a small container running and mount the root of the host to the /docker
directory in the image, this gives you access to the volumes used on the host.
docker run --rm -it -v /:/docker alpine:edge
from this point you can cd to the volume
cd /var/lib/docker/volumes/coap_service_db_data/_data
Solution 7 - Macos
Looks like the new version of docker for Mac has moved this to a UI element which you can see here. Clicking on that button which says CLI will launch a terminal which you can use to browse the docker file system.
Solution 8 - Macos
I think the new version of docker (my version is 20.10.5) uses socket instead of TTY to communicate with the virtual machine so you can use the nc command instead of the screen command.
nc -U ~/Library/Containers/com.docker.docker/Data/debug-shell.sock
Solution 9 - Macos
This path comes from Docker Host (not from MacOS) before "Docker for Mac Application" times, where there was a VirtualBox VM "default" and inside this VM, the mentioned path exists (for sure), now in "Docker for Mac Application" times there is a Docker.qcow2 image, which is qemu base vm. To jump inside this VM @mik-jagger way is ok (but there are few more)
Solution 10 - Macos
Run:
docker run -it --privileged --pid=host debian nsenter -t 1 -a bash
ls /var/lib/docker
Solution 11 - Macos
I would say that the file:
/var/run/docker.sock
Is actually at:
/Volumes/{DISKNAME}/var/run/docker.sock
If you run this, it should prove it, as long as your running VirtualBox 5.2.8 or later and the share for /Volumes
is setup to be auto-mounted and permanent AND you generated the default docker-machine while on that version of Virtualbox:
#!/bin/bash
docker run -d --restart unless-stopped -p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock portainer/portainer \
--no-auth
Then, access Portainer at: 192.168.99.100:9000 or localhost:9000
Solution 12 - Macos
Docker logs are not in /var/lib/docker on MacOS.
MacOs users can find the docker logs on this path;
/Users/Barrack.Kenya/Library/Containers/com.docker.docker/Data/log/host
-
job_name: docker static_configs:
- targets:
- docker labels: job: dockerlogs path: (Please put the path)
pipeline_stages:
- docker: {}
- targets:
Solution 13 - Macos
For MacOS I use the following steps:
- login into docker virtual-machine (on MacOS docker can be run only inside virtual machine, in my case I have VirtualBox tool with docker VM):
docker-machine ssh
- as soon as I logged-in I need to switch to super user from
docker
user:sudo -i
- now I'm able to check
/var/lib/docker
directory