将 docker 个卷移动到不同的分区
Move docker volume to different partition
我有一个服务器,我在其中 运行 一些带有卷的容器。我的所有卷都在 /var/lib/docker/volumes/
中,因为 docker 正在管理它。我使用 docker-compose 来启动我的容器。
最近,我试图停止我的一个容器,但这是不可能的:
$ docker-compose down
[17849] INTERNAL ERROR: cannot create temporary directory!
所以,我检查了数据是如何安装在服务器上的:
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 7,8G 0 7,8G 0% /dev
tmpfs 1,6G 1,9M 1,6G 1% /run
/dev/md3 20G 19G 0 100% /
tmpfs 7,9G 0 7,9G 0% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 7,9G 0 7,9G 0% /sys/fs/cgroup
/dev/md2 487M 147M 311M 33% /boot
/dev/md4 1,8T 1,7G 1,7T 1% /home
tmpfs 1,6G 0 1,6G 0% /run/user/1000
如您所见,/
只有 20Go,所以它已满,我无法使用 docker-compose 停止我的容器。
我的问题是:
有一个简单的解决方案可以增加可用 space
/
,使用 /dev/md4
?
或者我可以将卷移动到另一个地方而不丢失数据吗?
我解决了它创建一个符号 link 到更大尺寸的分区:
ln -s /scratch/docker_meta /var/lib/docker
/scratch/docker_meta 是我在更大分区中的文件夹。
我来到这里是因为我遇到了同样的问题。尽管一些消息来源建议您可以使用符号 link 来做到这一点,但这会导致各种问题。
根据 OS 和 Docker 版本,我遇到了格式错误的图像、奇怪的错误或 docker-daemon 拒绝启动。
Here 是一种解决方案,但似乎每个版本都有所不同。对我来说,解决方案是:
打开
/lib/systemd/system/docker.service
并更改此行
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
至:
ExecStart=/usr/bin/dockerd -g /mnt/WHATEVERYOUR/PARTITIONIS/docker --containerd=/run/containerd/containerd.sock
Docker 守护程序的这一部分是可配置的。最佳做法是更改数据文件夹;这可以通过 OS-level Linux 命令(如符号链接)来完成...我认为最好实际配置 Docker 守护程序以将数据存储在其他地方!
您可以通过编辑 Docker 命令行(例如启动 Docker 守护程序的 systemd 脚本)或更改 /etc/docker/daemon.json
.
文件应包含以下内容:
{
"data-root": "/path/to/your/docker"
}
如果您添加新的硬盘驱动器、分区或挂载点,您可以在此处添加它,docker 会将其数据存储在那里。
我有一个服务器,我在其中 运行 一些带有卷的容器。我的所有卷都在 /var/lib/docker/volumes/
中,因为 docker 正在管理它。我使用 docker-compose 来启动我的容器。
最近,我试图停止我的一个容器,但这是不可能的:
$ docker-compose down
[17849] INTERNAL ERROR: cannot create temporary directory!
所以,我检查了数据是如何安装在服务器上的:
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 7,8G 0 7,8G 0% /dev
tmpfs 1,6G 1,9M 1,6G 1% /run
/dev/md3 20G 19G 0 100% /
tmpfs 7,9G 0 7,9G 0% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 7,9G 0 7,9G 0% /sys/fs/cgroup
/dev/md2 487M 147M 311M 33% /boot
/dev/md4 1,8T 1,7G 1,7T 1% /home
tmpfs 1,6G 0 1,6G 0% /run/user/1000
如您所见,/
只有 20Go,所以它已满,我无法使用 docker-compose 停止我的容器。
我的问题是:
有一个简单的解决方案可以增加可用 space
/
,使用/dev/md4
?或者我可以将卷移动到另一个地方而不丢失数据吗?
我解决了它创建一个符号 link 到更大尺寸的分区:
ln -s /scratch/docker_meta /var/lib/docker
/scratch/docker_meta 是我在更大分区中的文件夹。
我来到这里是因为我遇到了同样的问题。尽管一些消息来源建议您可以使用符号 link 来做到这一点,但这会导致各种问题。
根据 OS 和 Docker 版本,我遇到了格式错误的图像、奇怪的错误或 docker-daemon 拒绝启动。
Here 是一种解决方案,但似乎每个版本都有所不同。对我来说,解决方案是:
打开
/lib/systemd/system/docker.service
并更改此行
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
至:
ExecStart=/usr/bin/dockerd -g /mnt/WHATEVERYOUR/PARTITIONIS/docker --containerd=/run/containerd/containerd.sock
Docker 守护程序的这一部分是可配置的。最佳做法是更改数据文件夹;这可以通过 OS-level Linux 命令(如符号链接)来完成...我认为最好实际配置 Docker 守护程序以将数据存储在其他地方!
您可以通过编辑 Docker 命令行(例如启动 Docker 守护程序的 systemd 脚本)或更改 /etc/docker/daemon.json
.
文件应包含以下内容:
{
"data-root": "/path/to/your/docker"
}
如果您添加新的硬盘驱动器、分区或挂载点,您可以在此处添加它,docker 会将其数据存储在那里。