53

通过卷 API 创建卷时,即容器卷模式现在不一定是最佳实践:

# docker volume inspect test-data
[
    {
        "Name": "test-data",
        "Driver": "local",
        "Mountpoint": "/var/lib/docker/volumes/test-data/_data"
    }
]

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

这与符号链接无关,可以与绑定安装有关,但我想知道 Docker 中是否有一些配置可以更改每个单独卷的默认位置。

4

4 回答 4

53

您可以通过更改其启动参数之一来更改 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

或者,您可以编辑默认为/etc/docker/daemon.json.

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

注意:在生产和本地都要小心!您还必须将现有数据/var/lib/docker/从新位置移动到 docker install 才能按预期工作。

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

于 2018-08-25T15:37:04.427 回答
23

2017 年:在17.05.0-ce (2017-05-04)中,PR 28696弃用--graph标志或--data-root提交 1ecaed0

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

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

issue 5922PR 5978中,文档已更新。

示例

ExecStart=/usr/bin/dockerd -H fd:// --data-root=/mnt/ssd/lib/docker

2016 年(现已弃用)

我只知道一个 docker 选项来改变/var/lib/docker自己,而不是它的子文件夹(它的一部分由 docker daemon storage driver 使用

请参阅docker 守护进程“杂项选项”

Docker 支持 Docker 数据目录 ( /var/lib/docker) 和/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

正如“ docker 映像存储在主机上的什么位置? ”中所述(这也适用于容器/卷):

目录的内容/var/lib/dockerDocker 用于存储的驱动程序而异。

于 2016-03-24T07:12:43.587 回答
7

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

于 2019-02-27T11:39:05.327 回答
0

如果您使用的是 Fedora(在 32 上测试),只需更改或添加--data-root带有所需路径的标志到OPTIONS变量 on /etc/sysconfig/docker,这是 systemd 用于启动 dockerd 服务的环境文件。

于 2020-09-25T17:56:44.253 回答