如何更改“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_TMPDIRdata 目录可以这样设置:

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”命令的默认位置?的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu系统如何更改用户密码

更改模式时如何更改导航阴影颜色?

如何更改分区ID为AF?

更改标签文本时如何更改标签颜色

如何更改环境的字体大小?

如何使用 sqitch postgresql 验证更改列数据类型更改?