据我所知,当docker映像被拉出来时,它们被安装到/var/lib/docker中。是否有办法改变这个位置,比如到一个挂载的卷,比如/mnt?
当前回答
该解决方案适用于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文件,请检查这个答案。
其他回答
复制粘贴版本的获胜者答案:)
只创建以下内容的文件:
$ sudo vi /etc/docker/daemon.json
{
"graph": "/my-docker-images"
}
在docker 1.12.6中的Ubuntu 16.04.2 LTS上测试
在一台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
对于那些期待2020年的人。以下是针对Windows 10 Machine的:
在Hyper-V管理器的全局操作窗格中单击Hyper-V 设置… 下的“虚拟硬盘”更改位置 默认到您想要的位置。 在虚拟机下更改 从默认位置移到所需位置,然后单击应用。
单击“确定”关闭Hyper-V设置页面。
一个更简单的解决方案是创建一个软链接点,指向您想要的任何东西,例如
link -s /var/lib/docker /mnt/whatever
它适用于我的CentOS 6.5服务器。
在Fedora 26和许多其他版本上,按照上面的描述移动基本文件夹位置后可能会遇到错误。如果你要把它移动到/home下面的某个地方,这一点尤其正确。这是因为SeLinux介入并阻止docker容器在这个位置下运行它的许多程序。
简单的解决方案是在添加-g参数时删除——enable-selinux选项。
推荐文章
- 试图连接到https://index.docker.io时,网络超时
- 为每个Docker图像查找图层和图层大小
- 如何避免在为Python项目构建Docker映像时重新安装包?
- 如何用docker-compose更新现有图像?
- 如何在构建docker期间设置环境变量
- 拉访问拒绝存储库不存在或可能需要docker登录
- 如何在ENTRYPOINT数组中使用Docker环境变量?
- Docker:容器不断地重新启动
- Mac/OS X上的/var/lib/docker在哪里
- 如何用docker-compose标记docker图像
- 从环境文件中读入环境变量
- 禁用特定RUN命令的缓存
- 从Docker容器获取环境变量
- E: gnupg, gnupg2和gnupg1似乎没有安装,但是这个操作需要其中一个
- 如何从docker更改默认docker注册表。IO到我的私人注册表?