Answers:
对于最新版本的Docker,您可以data-root
在中/etc/docker/daemon.json
(根据https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file)将参数的值设置为自定义路径。
对于较旧的版本,可以-g
在启动Docker守护程序时使用该选项更改Docker的存储基础目录(容器和映像所在的位置)。(检查docker --help
)。您可以在Docker启动时自动将该设置添加到/ etc / default / docker
-g
选项添加到/ etc / defaults / docker中,而不是修改Upstart文件,请参阅我的答案。
DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
根据评论的建议,我利用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
要么:
Docker Root Dir: /mnt
然后,您可以安全地删除旧的Docker存储:
rm -rf /var/lib/docker
docker info
声明可能已过时。在Ubuntu 16.04上,重新配置的检查为sudo docker info | grep "Docker Root Dir"
。否则,好的答案应该是被接受的;)
Docker Root Dir: /"/mnt"
,当你运行docker info|grep "Docker Root Dir"
,必须更换--data-root="/mnt"
成--data-root=/mnt
里面的文件docker-storage.conf
因为我们需要用新的泊坞窗版本,data-root
如graph
在v17.05.0被弃用:官方过时的文档
编辑/etc/docker/daemon.json
(如果不存在,请创建)并包括:
{
"data-root": "/new/path/to/docker-data"
}
然后使用以下命令重启Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
由于我没有在Fedora中找到执行此操作的正确说明(编辑:人们在评论中指出这也应在CentOS和Suse上起作用)(/ etc / default / docker不在此处使用),因此我添加了在这里回答:
您必须编辑/ etc / sysconfig / docker,并在OPTIONS变量中添加-g选项。如果有多个选项,请确保将它们括在“”中。就我而言,该文件包含:
OPTIONS=--selinux-enabled
所以它会变成
OPTIONS="--selinux-enabled -g /mnt"
重新启动(systemctl restart docker
)后,Docker应该使用新目录
不要使用符号链接将docker文件夹移动到/ mnt(例如)。这可能会导致docker rm命令出现问题。
最好对docker使用-g选项。在Ubuntu上,您可以在/etc/default/docker.io中对其进行永久设置。增强或替换DOCKER_OPTS Line。
这是一个示例:`DOCKER_OPTS =“-g / mnt / somewhere / else / docker /”
docker rm
使用符号链接时,我会遇到什么麻烦?
Ubuntu 16.04
stackoverflow.com/a/30219552/977622中执行此操作
停止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
sudo ln -s /path/to/new/docker/ /var/lib/docker
该解决方案适用于Red Hat 7.2和Docker 1.12.0
在文本编辑器中编辑文件 /lib/systemd/system/docker.service。
在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"
}
Ubuntu 16.04.2 LTS
在docker 上测试1.12.6
对于Debian / Ubuntu或Fedora,您可能可以使用其他答案。但是,如果在/etc/default/docker
或下没有文件/etc/sysconfig/docker
,并且系统正在运行systemd,则可能要遵循h3nrik的回答。我正在使用Arch,这对我有用。
基本上,您需要配置systemd以读取新的Docker映像位置作为环境变量,并将该环境变量传递到Docker守护程序执行脚本中。
为了完整起见,这是h3nrick的答案:
你有/lib/systemd/system/docker.service
文件吗?
如果是这样,请对其进行编辑,以使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
。
有关更多信息,请参阅文档。
一个更简单的解决方案是创建指向您想要的任何内容的软链接点,例如
link -s /var/lib/docker /mnt/whatever
它适用于我的CentOS 6.5服务器。
正如@mbarthelemy所建议的那样,-g
可以在直接启动docker 守护程序时通过选项完成此操作。
但是,如果将docker作为系统服务启动,则不建议修改该/etc/default/docker
文件。有一个指引,这个位于这里。
正确的方法是/etc/docker/daemon.json
在Linux(或Mac)系统或%programdata%\docker\config\daemon.json
Windows 上创建文件。如果此文件未用于其他任何用途,则以下字段应足够:
{
"graph": "/docker/daemon_files"
}
假设您要让docker保留其数据的新位置是 /docker/daemon_files
在openSUSE Leap 42.1上
$cat /etc/sysconfig/docker
## Path : System/Management
## Description : Extra cli switches for docker daemon
## Type : string
## Default : ""
## ServiceRestart : docker
#
DOCKER_OPTS="-g /media/data/installed/docker"
请注意,DOCKER_OPTS最初是空的,我所做的只是添加了参数以使docker使用我的新目录
在一个AWS Ubuntu 16.04服务器上,我将Docker映像放置在单独的EBS上,该EBS安装在docker目录下的/ home / ubuntu / kaggle /上
我的初始化脚本的这一片段正常工作
# 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 /programming/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