How to move docker data directory to another location on Ubuntu

docker 默认 容器存储目录为 /var/lib/docker

一般来说我们需要将系统磁盘应用数据盘进行分离,除了能够获得更好的性能,最关键的还是能够让数据更安全可靠:多数云服务数据盘支持备份快照、并且支持大容量 SSD 盘。

1. Stop the docker daemon

sudo systemctl stop docker

2. Add a configuration file to tell the docker daemon what is the location of the data directory

mkdir -p /path/to/your/docker

Using your preferred text editor add a file named daemon.json under the directory /etc/docker. The file should have this content:

   "graph": "/path/to/your/docker" 

of course you should customize the location /path/to/your/docker with the path you want to use for your new docker data directory.

3. Copy the current data directory to the new one

sudo rsync -aqxP /var/lib/docker/ /path/to/your/docker
  • -a, 归档模式,表示递归传输并保持文件属性
  • -v, 显示 rsync 过程中详细信息,可以使用 -vvvv 获取更详细信息
  • -P, 显示文件传输的进度信息,(实际上 -P = --partial --progress,其中的 --progress 才是显示进度信息的)
  • -z, 传输时进行压缩提高效率
  • -x, -x, --one-file-system 不要跨越文件系统边界

4. Rename the old docker directory

sudo mv /var/lib/docker /var/lib/docker.old

This is just a sanity check to see that everything is ok and docker daemon will effectively use the new location for its data.

5. Restart the docker daemon

systemctl restart docker
# or
sudo service docker restart

6. Test

If everything is ok you should see no differences in using your docker containers. When you are sure that the new directory is being used correctly by docker daemon you can delete the old data directory.

sudo rm -rf /var/lib/docker.old

Follow the previous steps to move docker data directory and you won’t risk any more to run out of space in your root partition, and you’ll happily use your docker containers for many years to come. 😉

dev@iZ2ze8mda8vb5igpwhsvggZ:~$ docker info |grep 'Docker Root Dir'
WARNING: No swap limit support
 Docker Root Dir: /data/docker/docker-root-dir

7. Extra step: remote debug on your Docker container!

Do you know that you can remote debug your application running on a Docker container? Check out my tutorial on Remote debugging a Django project in VS Code! It uses Django as an example, but the Docker related part is general.

How to move docker data directory to another location on Ubuntu