Pio*_*ról 134
根据评论的建议,我利用Docker systemd文档来改进这个答案.下面的过程不需要重启,而且更清洁.
首先创建自定义配置的目录和文件:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf
Run Code Online (Sandbox Code Playgroud)
对于17.06-ce粘贴之前的docker版本:
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --graph="/mnt"
Run Code Online (Sandbox Code Playgroud)
对于17.06-ce粘贴后的码头工具:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt"
Run Code Online (Sandbox Code Playgroud)
daemon.json
我最近在Fedora 25上用17.09-ce尝试了上面的程序,它似乎不起作用.而不是简单的修改就/etc/docker/daemon.json
可以了:
{
"graph": "/mnt",
"storage-driver": "overlay"
}
Run Code Online (Sandbox Code Playgroud)
尽管有这种方法,你必须重新加载配置并重启Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
Run Code Online (Sandbox Code Playgroud)
要确认Docker已重新配置:
docker info|grep "loop file"
Run Code Online (Sandbox Code Playgroud)
在最新版本(17.03)中,需要不同的命令:
docker info|grep "Docker Root Dir"
Run Code Online (Sandbox Code Playgroud)
输出应如下所示:
Data loop file: /mnt/devicemapper/devicemapper/data
Metadata loop file: /mnt/devicemapper/devicemapper/metadata
Run Code Online (Sandbox Code Playgroud)
要么:
Docker Root Dir: /mnt
Run Code Online (Sandbox Code Playgroud)
然后你可以安全地删除旧的Docker存储:
rm -rf /var/lib/docker
Run Code Online (Sandbox Code Playgroud)
mba*_*emy 128
使用最新版本的Docker,您可以将data-root
参数的值设置为自定义路径/etc/docker/daemon.json
(根据https://docs.docker.com/v1.11/engine/reference/commandline/daemon/#daemon-configuration-文件).
对于旧版本,您可以-g
在启动Docker守护程序时使用该选项更改Docker的存储基目录(容器和图像的位置).(检查docker --help
).您可以在Docker启动时自动应用此设置,方法是将其添加到/ etc/default/docker
and*_*art 41
对于新的docker版本,我们需要使用data-root
官方弃用的文档 (Deprecated In Release:v17.05.0)
{
"data-root": "/new/path/to/docker-data"
}
Run Code Online (Sandbox Code Playgroud)
Vit*_*tor 38
由于我没有在Fedora中找到正确的指令(EDIT:人们在评论中指出这也适用于CentOS和Suse)(/ etc/default/docker不在那里使用),我正在添加我的回答这里:
您必须编辑/ etc/sysconfig/docker,并在OPTIONS变量中添加-g选项.如果有多个选项,请确保将它们括在""中.就我而言,该文件包含:
OPTIONS=--selinux-enabled
Run Code Online (Sandbox Code Playgroud)
所以它会成为
OPTIONS="--selinux-enabled -g /mnt"
Run Code Online (Sandbox Code Playgroud)
重启(systemctl restart docker
)后,Docker应该使用新目录
sut*_*her 23
不要使用符号链接将docker文件夹移动到/ mnt(例如).这可能会导致docker rm命令出现问题.
最好使用-g Option for docker.在Ubuntu上,您可以在/etc/default/docker.io中永久设置它.增强或替换DOCKER_OPTS线.
这里有一个例子:`DOCKER_OPTS =" - g/mnt/somewhere/else/docker /"
Top*_*era 13
复制粘贴版本的获胜者答案:)
仅使用以下内容创建此文件:
$ sudo vi /etc/docker/daemon.json
{
"graph": "/my-docker-images"
}
Run Code Online (Sandbox Code Playgroud)
Ubuntu 16.04.2 LTS
在docker 上测试过1.12.6
小智 12
在CentOS 6.5中
service docker stop
mkdir /data/docker (new directory)
vi /etc/sysconfig/docker
Run Code Online (Sandbox Code Playgroud)
添加以下行
other_args=" -g /data/docker -p /var/run/docker.pid"
Run Code Online (Sandbox Code Playgroud)
然后保存文件并再次启动docker
service docker start
Run Code Online (Sandbox Code Playgroud)
并将存储库文件 /data/docker
Sud*_*pta 11
此解决方案适用于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/
Run Code Online (Sandbox Code Playgroud)
执行以下命令
systemctl daemon-reload
systemctl restart docker
Run Code Online (Sandbox Code Playgroud)
执行命令以检查docker目录
docker info | grep "loop file\|Dir"
Run Code Online (Sandbox Code Playgroud)
如果您在Red Hat或docker 1.7.1中有/ etc/sysconfig/docker文件,请检查此答案.
fnj*_*njn 11
停止docker服务
sudo systemctl stop docker
Run Code Online (Sandbox Code Playgroud)
将现有的Docker目录移动到新位置
sudo mv /var/lib/docker/ /path/to/new/docker/
Run Code Online (Sandbox Code Playgroud)
创建符号链接
sudo ln -s /path/to/new/docker/ /var/lib/docker/
Run Code Online (Sandbox Code Playgroud)
启动docker服务
sudo systemctl start docker
Run Code Online (Sandbox Code Playgroud)
对于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
.
有关详细信息,请查看文档.
根据此Linux 安装后步骤指南以及我在网络爬行时发现的内容,执行此操作的官方方法如下:
覆盖 docker 服务配置:
sudo systemctl edit docker.service
Run Code Online (Sandbox Code Playgroud)
添加或修改以下行,替换您自己的值。
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph="/mnt/docker"
Run Code Online (Sandbox Code Playgroud)
保存文件。(它创建:/etc/systemd/system/docker.service.d/override.conf
)
重新加载systemctl
配置。
sudo systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)
重新启动 Docker。
sudo systemctl restart docker.service
Run Code Online (Sandbox Code Playgroud)
/var/lib/docker
在此之后,如果您没有任何需要备份的图像,则可以删除文件夹。
这篇博文对我有帮助
\n以下是即使在您\xe2\x80\x99 创建了 Docker 容器等之后更改目录的步骤。
\n请注意,您不需要编辑\xe2\x80\x99docker.service
或文件,因为它将从下面提到的文件init.d
中读取更改。.json
编辑/etc/docker/daemon.json
(如果不存在,则创建)
添加以下内容
\n{\n "data-root": "/new/path/to/docker-data"\n}\n
Run Code Online (Sandbox Code Playgroud)\nsudo systemctl stop docker\n
Run Code Online (Sandbox Code Playgroud)\nps aux | grep -i docker | grep -v grep\n
Run Code Online (Sandbox Code Playgroud)\nsudo rsync -axPS /var/lib/docker/ /new/path/to/docker-data\n
Run Code Online (Sandbox Code Playgroud)\nsudo systemctl start docker\n
Run Code Online (Sandbox Code Playgroud)\ndocker info | grep \'Docker Root Dir\'\n
Run Code Online (Sandbox Code Playgroud)\ndocker ps\n
Run Code Online (Sandbox Code Playgroud)\nsudo rm -r /var/lib/docker\n
Run Code Online (Sandbox Code Playgroud)\n
正如@mbarthelemy 所推荐的,这可以通过-g
直接启动docker守护进程时的选项来完成。
但是如果docker是作为系统服务启动的,不建议修改/etc/default/docker
文件。有一个指引,这个位于这里。
正确的方法是/etc/docker/daemon.json
在 Linux(或 Mac)系统或%programdata%\docker\config\daemon.json
Windows上创建文件。如果此文件未用于其他任何用途,则以下字段就足够了:
{
"graph": "/docker/daemon_files"
}
Run Code Online (Sandbox Code Playgroud)
这是假设您希望 docker 保留其数据的新位置是 /docker/daemon_files
归档时间: |
|
查看次数: |
114456 次 |
最近记录: |