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


当前回答

因为我没有找到在Fedora中这样做的正确说明(编辑:人们在评论中指出,这也应该在CentOS和Suse上工作)(/etc/default/docker不被使用),我在这里添加我的答案:

您必须编辑/etc/sysconfig/docker,并在OPTIONS变量中添加-g选项。如果有多个选项,请确保将它们用“”括起来。在我的例子中,该文件包含:

OPTIONS=--selinux-enabled

所以它会变成

OPTIONS="--selinux-enabled -g /mnt"

重启后(systemctl restart docker), docker应该使用新的目录

其他回答

在一台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

一个更简单的解决方案是创建一个软链接点,指向您想要的任何东西,例如

link -s /var/lib/docker /mnt/whatever

它适用于我的CentOS 6.5服务器。

对于那些期待2020年的人。以下是针对Windows 10 Machine的:

在Hyper-V管理器的全局操作窗格中单击Hyper-V 设置… 下的“虚拟硬盘”更改位置 默认到您想要的位置。 在虚拟机下更改 从默认位置移到所需位置,然后单击应用。

单击“确定”关闭Hyper-V设置页面。

该解决方案适用于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文件,请检查这个答案。

对于Debian/Ubuntu或Fedora,您可能可以使用其他答案。但是,如果/etc/default/docker或/etc/sysconfig/docker下没有文件,并且您的系统正在运行systemd,您可能希望通过h3nrik来遵循这个答案。我使用Arch,这对我有用。

基本上,您需要配置systemd以读取新的docker映像位置作为环境变量,并将该环境变量传递到docker守护进程执行脚本。

为了完整起见,以下是h3nrick的答案:


你有/lib/systemd/system/docker。服务文件?

如果是,编辑它,以便Docker服务使用通常的/etc/default/ Docker作为环境文件:EnvironmentFile=-/etc/default/ Docker。

在/etc/default/docker文件中添加DOCKER_OPTS="-g /home/rseixas/Programs/Docker/images"。

最后执行systemctl daemon-reload && systemctl restart docker。

欲了解更多信息,请参阅文档。