据我所知,当docker映像被拉出来时,它们被安装到/var/lib/docker中。是否有办法改变这个位置,比如到一个挂载的卷,比如/mnt?
当前回答
例如,不要使用符号链接将docker文件夹移动到/mnt。 这可能会导致使用docker rm命令时出现问题。
docker最好使用-g选项。 在Ubuntu上,你可以在/etc/default/docker.io中永久设置它。增强或替换DOCKER_OPTS行。
这里有一个例子: “DOCKER_OPTS = " - g / mnt /地方/其他/码头工人/”
其他回答
在一台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服务器。
对于17.06.0-ce-mac19版本的Mac用户,您可以简单地从用户界面的首选项选项中移动磁盘映像位置,只需更改磁盘映像的位置,它就会工作(通过单击移动磁盘映像)并重新启动docker。使用这种方法,我可以使用外部硬盘来存储docker图像。
这篇博文帮助了我
以下是在创建Docker容器之后更改目录的步骤。
注意,你不需要编辑docker。服务或init。D文件,因为它将从下面提到的.json文件中读取更改。
编辑/etc/docker/daemon.Json(如果它不存在,创建它) 添加以下内容
{
"data-root": "/new/path/to/docker-data"
}
停止码头工人
sudo systemctl stop docker
检查码头已停止
ps aux | grep -i docker | grep -v grep
将文件复制到新位置
sudo rsync -axPS /var/lib/docker/ /new/path/to/docker-data
重新启动Docker
sudo systemctl start docker
检查Docker已使用新位置启动
docker info | grep 'Docker Root Dir'
检查一切已经启动,应该运行
docker ps
在服务器上保留两个副本几天,以确保没有问题出现,然后随意删除它。
sudo rm -r /var/lib/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
推荐文章
- 试图连接到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到我的私人注册表?