据我所知,当docker映像被拉出来时,它们被安装到/var/lib/docker中。是否有办法改变这个位置,比如到一个挂载的卷,比如/mnt?


当前回答

基于Linux安装后步骤指南和我在web爬行时发现的官方方法如下:

覆盖docker服务配置文件: Sudo systemctl编辑docker.service 添加或修改以下行,替换您自己的值。 (服务) ExecStart = ExecStart = / usr / bin / dockerd——图=“/ mnt /码头工人”

保存文件。(它创建了:/etc/systemd/system/docker.service.d/override.conf)

重新加载systemctl配置。 Sudo systemctl daemon-reload 重启码头工人。 Sudo systemctl restart docker.service

在这之后,如果你可以核化/var/lib/docker文件夹,如果你没有任何映像,你可以备份。

其他回答

该解决方案适用于Red Hat 7.2和Docker 1.12.0

编辑文件 /lib/systemd/system/docker.服务。

在ExecStart指令的末尾添加-g /path/to/docker/。完整的直线应该是这样的。

ExecStart=/usr/bin/dockerd -g /path/to/docker/

执行以下命令

systemctl daemon-reload
systemctl restart docker

执行命令查看docker目录

docker info | grep "loop file\|Dir"

如果您在Red Hat或docker 1.7.1中有/etc/sysconfig/docker文件,请检查这个答案。

根据评论中的建议,我利用Docker systemd文档来改进这个答案。 下面的程序不需要重新启动,而且更简洁。

首先创建目录和文件进行自定义配置:

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf

对于17.06-ce之前的docker版本,请粘贴:

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --graph="/mnt"

对于17.06-ce后的docker,粘贴:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt"

通过daemon.json的替代方法

我最近在Fedora 25上使用17.09-ce尝试了上述过程,但它似乎不起作用。而不是在/etc/docker/daemon.Json可以做到:

{
    "graph": "/mnt",
    "storage-driver": "overlay"
}

尽管你必须重新加载配置并重新启动Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

确认Docker已重新配置:

docker info|grep "loop file"

在最新版本(17.03)中,需要执行不同的命令:

docker info|grep "Docker Root Dir"

输出应该是这样的:

 Data loop file: /mnt/devicemapper/devicemapper/data
 Metadata loop file: /mnt/devicemapper/devicemapper/metadata

Or:

 Docker Root Dir: /mnt

然后你可以安全地删除旧的Docker存储:

rm -rf /var/lib/docker

在Fedora 26和许多其他版本上,按照上面的描述移动基本文件夹位置后可能会遇到错误。如果你要把它移动到/home下面的某个地方,这一点尤其正确。这是因为SeLinux介入并阻止docker容器在这个位置下运行它的许多程序。

简单的解决方案是在添加-g参数时删除——enable-selinux选项。

在一台AWS Ubuntu 16.04服务器上,我把Docker映像放在一个单独的EBS上,挂载在/home/ubuntu/kaggle/上,在Docker目录下

我的初始化脚本的这段代码运行正常

# where are the images initially stored?
sudo docker info | grep "Root Dir"
# ... not where I want them

# modify the configuration files to change to image location
# NOTE this generates an error
# WARNING: Usage of loopback devices is strongly discouraged for production use.
#          Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
# see https://stackoverflow.com/questions/31620825/
#     warning-of-usage-of-loopback-devices-is-strongly-discouraged-for-production-use

sudo sed -i   ' s@#DOCKER_OPTS=.*@DOCKER_OPTS="-g /home/ubuntu/kaggle/docker"@ '  /etc/default/docker

sudo chmod -R ugo+rw /lib/systemd/system/docker.service
sudo cp  /lib/systemd/system/docker.service /etc/systemd/system/
sudo chmod -R ugo+rw /etc/systemd/system/

sudo sed -i ' s@ExecStart.*@ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://@ '  /etc/systemd/system/docker.service
sudo sed -i '/ExecStart/a EnvironmentFile=-/etc/default/docker' /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker info | grep "Root Dir"
# now they're where I want them

更简单的方法:

停止docker服务

sudo systemctl stop docker

移动现有docker目录到新位置

sudo mv /var/lib/docker/ /path/to/new/docker/

创建符号链接

sudo ln -s /path/to/new/docker/ /var/lib/docker

启动docker服务

sudo systemctl start docker