如何更改"docker create volume"命令的默认位置?

duk*_*ing 24 docker docker-volume

通过卷API创建卷时,也就是说,容器卷模式现在不再是最佳实践了:

# docker volume inspect test-data
[
    {
        "Name": "test-data",
        "Driver": "local",
        "Mountpoint": "/var/lib/docker/volumes/test-data/_data"
    }
]
Run Code Online (Sandbox Code Playgroud)

我想,例如,/ data中存在docker卷(它安装在不同的物理卷中).

这不可能与符号链接有关,可以使用绑定挂载,但我想知道Docker中是否有一些配置来更改每个单独卷的默认位置.

Von*_*onC 15

2017:17.05.0-ce(2017-05-04),PR 28696弃用--graph旗帜赞成或--data-root:提交1ecaed0

名称" graph"是很久以前的遗留术语,当时在默认位置有一个目录/var/lib/docker/graph.

但是,该标志将指示" graph"目录的父目录的路径,该目录不仅包含图像数据,还包含卷,容器和网络的数据.
在最新版本的docker中,此目录还包含swarm群集状态和节点证书.

随着问题的5922PR 5978,该文档已被更新.

示例:

ExecStart=/usr/bin/dockerd -H fd:// --data-root=/mnt/ssd/lib/docker
Run Code Online (Sandbox Code Playgroud)

2016年(现已弃用)

我只知道更改/var/lib/docker自身的docker选项,而不是它的子文件夹(docker守护程序存储驱动程序使用的"图形"的一部分)

请参阅docker守护程序"其他选项":

Docker支持Docker数据目录(/var/lib/docker)和for的软链接/var/lib/docker/tmp.
DOCKER_TMPDIR数据目录可以这样设置:

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
Run Code Online (Sandbox Code Playgroud)

如" 主机上存储的docker映像哪里? "(并且也适用于容器/卷)中所述:

/var/lib/docker目录的内容取决于Docker用于存储的驱动程序.


Hug*_*o R 15

您可以通过更改其中一个调用的启动参数来更改Docker存储其文件(包括卷)的位置--data-root.

如果您使用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
Run Code Online (Sandbox Code Playgroud)

或者,您可以编辑默认为Docker守护程序配置文件/etc/docker/daemon.json.

重新启动Docker守护程序,您的卷将在 /new_location/volumes/{volume_name}/_data

注意:在生产中要小心,也要在本地!您还必须将现有数据移动/var/lib/docker/到新位置,以便docker安装按预期工作.

如果您希望特定文件夹位于特定位置,则可以使用新位置的符号链接.

  • 不推荐使用-g标志.我建议使用新的--data-root标志.[来源:https://docs.docker.com/engine/deprecated/#-g-and---graph-flags-on-dockerd] (2认同)
  • `--data-root` 参数将所有持久数据移动到指定目录,包括容器数据、镜像数据等。如果能够指定卷所在的目录就太好了,以便将用户数据与 docker 内部分离状态数据。 (2认同)
  • 实际上,我也希望只保留 RAID 上的卷,而不是状态数据和容器,因为我总是可以重新提取映像 - 所以这里不需要冗余,但它是针对卷的... Aww :/ (2认同)

Cod*_*dev 6

我通过将 /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 上为我工作