如何更改“docker create volume”命令的默认位置?
Posted
技术标签:
【中文标题】如何更改“docker create volume”命令的默认位置?【英文标题】:How to change the default location for "docker create volume" command? 【发布时间】:2016-07-01 02:03:53 【问题描述】:当通过卷 API 创建卷时,即容器卷模式现在不一定是最佳实践:
# docker volume inspect test-data
[
"Name": "test-data",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/test-data/_data"
]
例如,我想在 /data 中存在 docker 卷(它安装在不同的物理卷中)。
符号链接无法做到这一点,绑定挂载可以做到这一点,但我想知道 Docker 中是否有一些配置可以更改每个单独卷的默认位置。
【问题讨论】:
我使用符号链接:# cd /var/lib/docker/volumes
# ln -s /mnt/myvolume myvolume
,然后创建卷并启动您的 docker 映像:# docker volume create --name myvolume
# docker run -v myvolume:/myvolumemountpoint ...
使用符号链接似乎可以正常工作,但是您无法删除该卷,因为docker
不允许删除不是@987654328 的子目录的卷@。 (显然docker
解析了卷的符号链接。)
与上述评论相关(关于无法删除由符号链接驻留的卷):github.com/moby/moby/issues/39446
【参考方案1】:
您可以通过更改其 startup parameters 之一(称为 --data-root
)来更改 Docker 存储其文件(包括卷)的位置。
如果您使用 systemd 进行服务管理,该文件通常位于 /lib/systemd/system/docker.service
。像这样编辑文件:
# Old - taken from the generated docker.service file in Ubuntu 16.04's docker.io package
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
# New
ExecStart=/usr/bin/dockerd --data-root /new_location/ -H fd:// $DOCKER_OPTS
或者,您可以编辑默认为 /etc/docker/daemon.json
的 Docker 守护程序配置文件。
重新启动 Docker 守护程序,您的卷将在 /new_location/volumes/volume_name/_data
下
注意:在生产和本地都要小心!您还必须将现有数据从 /var/lib/docker/
移动到新位置,以便 docker install 能够按预期工作。
如果您希望特定文件夹位于特定位置,您可以使用新位置的符号链接。
【讨论】:
不推荐使用 -g 标志。我建议使用新的 --data-root 标志。 [来源:docs.docker.com/engine/deprecated/…--data-root
参数将 all 持久性数据移动到指定目录,包括容器数据、图像数据等。如果能够指定卷所在的目录就好了go,为了将用户数据与 docker 内部状态数据分开。【参考方案2】:
2017:17.05.0-ce (2017-05-04),PR 28696 弃用 --graph
标志或 --data-root
:commit 1ecaed0
名称“
graph
”是很久以前的旧术语,当时默认位置/var/lib/docker/graph
有一个目录。但是,该标志将指示“
graph
”目录的父目录的路径,该目录不仅包含图像数据,还包含卷、容器和网络的数据。 在最新版本的 docker 中,该目录还包含 swarm 集群状态和节点证书。
对于issue 5922 和PR 5978,文档已更新。
Example:
ExecStart=/usr/bin/dockerd -H fd:// --data-root=/mnt/ssd/lib/docker
2016(现已弃用)
我只知道一个 docker 选项可以更改 /var/lib/docker
本身,而不是其子文件夹("graph" used by a docker daemon storage driver 的一部分)
见docker daemon "Miscellaneous options":
Docker 支持 Docker 数据目录 (
/var/lib/docker
) 和/var/lib/docker/tmp
的软链接。DOCKER_TMPDIR
和 data 目录可以这样设置:
DOCKER_TMPDIR=/mnt/disk2/tmp /usr/local/bin/docker daemon -D -g /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1
# or
export DOCKER_TMPDIR=/mnt/disk2/tmp
/usr/local/bin/docker daemon -D -g /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log
如“Where are docker images stored on the host machine?”中所述(这也适用于容器/卷):
/var/lib/docker
目录的内容因on the driver Docker is using for storage 而异。
【讨论】:
【参考方案3】:我通过将 /var/lib/docker 的内容移动到新位置,然后放置一个指向新位置的符号链接,成功移动了 docker 的存储位置(我从这里 https://askubuntu.com/questions/631450/change-data-directory-of-docker 获取了这个解决方案):
注意 - 这些步骤取决于您当前的 /var/lib/docker 是 实际目录(不是指向另一个位置的符号链接)。
1) 停止泊坞窗:
service docker stop
。验证没有 docker 进程正在运行:ps aux | grep -i [d]ocker
2) 仔细检查 docker 确实没有运行。看一下当前的docker目录:
ls /var/lib/docker/
2b) 备份
- tar -zcC /var/lib docker > /mnt/pd0/var_lib_docker-backup-$(date +%s).tar.gz
3) 将 /var/lib/docker 目录移动到新分区:
mv /var/lib/docker /mnt/pd0/docker
4) 建立符号链接:
ln -s /mnt/pd0/docker /var/lib/docker
5) 查看目录结构以确保它看起来像 它在 mv 之前完成:
ls /var/lib/docker/
(注意尾部斜杠)6) 启动docker备份
service docker start
7) 重启你的容器(解析符号链接)
在带有 Docker 18.09.2 的 Azure VM 上的 Ubuntu 18.04.1 LTS 上为我工作
【讨论】:
【参考方案4】:如果您使用 Fedora(在 32 上测试),只需更改或添加带有所需路径的 --data-root
标志到 /etc/sysconfig/docker
上的 OPTIONS
变量,这是 systemd 用于启动 dockerd 的环境文件服务。
【讨论】:
以上是关于如何更改“docker create volume”命令的默认位置?的主要内容,如果未能解决你的问题,请参考以下文章