如何更改docker镜像安装目录?

时间:2014-06-19 14:49:03

标签: docker

据我所知,docker图像在被拉动时安装到/var/lib/docker。有没有办法更改此位置,例如更改为/mnt等已安装的卷?

19 个答案:

答案 0 :(得分:126)

根据评论的建议,我使用Docker systemd documentation来改进这个答案。 以下程序不需要重启,而且更清洁。

首先创建自定义配置的目录和文件:

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf

对于docker版本 17.06-ce之前粘贴:

[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

答案 1 :(得分:121)

使用最新版本的Docker,您可以在graph中将/etc/docker/daemon.json参数的值设置为自定义路径 (根据https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file)。

对于旧版本,您可以在启动Docker守护程序时使用-g选项更改Docker的存储基目录(容器和图像的位置)。 (检查docker --help)。 您可以在Docker启动时自动应用此设置,方法是将其添加到 / etc / default / docker

答案 2 :(得分:36)

由于我没有在Fedora中找到正确的指令(编辑:人们在评论中指出这也适用于CentOS和Suse)(/ etc / default / docker不在那里使用),我'我在这里添加我的答案:

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

OPTIONS=--selinux-enabled

所以它会变成

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

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

答案 3 :(得分:27)

对于新的docker版本,我们需要使用data-root,因为graph在v17.05.0中已弃用:official deprecated docs

编辑/etc/docker/daemon.json(如果它不存在,请创建它)并包含:

{
  "data-root": "/new/path/to/docker-data"
}

然后用:

重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
  • 使用带有数据根的Docker Storage的更详细的逐步说明(包括移动数据)可在以下位置找到:Blog post
  • 如果Windows有类似的帖子Windows specific

答案 4 :(得分:23)

不要使用符号链接将docker文件夹移动到/ mnt(例如)。 这可能会导致 docker rm 命令出现问题。

最好使用-g Option for docker。 在Ubuntu上,您可以在/etc/default/docker.io中永久设置它。增强或替换DOCKER_OPTS线。

这是一个例子: `DOCKER_OPTS =" -g / mnt / somewhere / else / docker /"

答案 5 :(得分:13)

获胜者答案的复制粘贴版本:)

仅使用以下内容创建此文件:

$ sudo vi /etc/docker/daemon.json

  {
      "graph": "/my-docker-images"
  }

在泊坞窗Ubuntu 16.04.2 LTS

中的1.12.6上进行了测试

答案 6 :(得分:12)

在CentOS 6.5中

service docker stop
mkdir /data/docker  (new directory)
vi /etc/sysconfig/docker

添加以下行

other_args=" -g /data/docker -p /var/run/docker.pid"

然后保存文件并再次启动docker

service docker start

并将在/data/docker

中创建存储库文件

答案 7 :(得分:11)

此解决方案适用于 Red Hat 7.2& Docker 1.12.0

编辑文件 文本编辑器中的 /lib/systemd/system/docker.service

ExecStart 指令的末尾添加 -g / path /到/ 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 文件,请选中this answer。

答案 8 :(得分:7)

更简单的方法:

停止泊坞窗服务

ArrayList

将现有的泊坞窗目录移至新位置

sudo systemctl stop docker

创建符号链接

sudo mv /var/lib/docker/ /path/to/new/docker/

启动泊坞窗服务

sudo ln -s /path/to/new/docker/ /var/lib/docker/

答案 9 :(得分:6)

对于Debian / Ubuntu或Fedora,您可以使用其他答案。但是,如果您没有/etc/default/docker/etc/sysconfig/docker下的文件,并且您的系统正在运行systemd,则可能需要关注this answer by 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

如需了解更多信息,请查看documentation

答案 10 :(得分:4)

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

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

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

答案 11 :(得分:4)

正如@mbarthelemy所推荐的,这可以在直接启动docker守护进程时通过-g选项完成。

但是,如果将docker作为系统服务启动,则不建议修改/etc/default/docker文件。这个位于here的指南。

正确的方法是在Linux(或Mac)系统上创建/etc/docker/daemon.json文件,或在Windows上创建%programdata%\docker\config\daemon.json。如果此文件未用于其他任何内容,则以下字段应足够:

{
    "graph": "/docker/daemon_files"
}

这假设您希望Docker保留其数据的新位置为/docker/daemon_files

答案 12 :(得分:2)

根据此 Post-installation steps for Linux 指南以及我在网络爬行时发现的内容,执行此操作的官方方法如下:

  1. 覆盖 docker 服务配置:

     sudo systemctl edit docker.service
    
  2. 添加或修改以下几行,替换您自己的值。

     [Service]
     ExecStart=
     ExecStart=/usr/bin/dockerd --graph="/mnt/docker"
    

保存文件。 (它创建:/etc/systemd/system/docker.service.d/override.conf

  1. 重新加载 systemctl 配置。

     sudo systemctl daemon-reload
    
  2. 重启 Docker。

     sudo systemctl restart docker.service
    

在此之后,如果您想备份 /var/lib/docker 文件夹,如果您没有要备份的任何图像。

答案 13 :(得分:2)

在Fedora 26和许多其他版本上,如上所述,移动基本文件夹位置后可能会遇到错误。如果您将它移动到/ home下的某个位置,则尤其如此。这是因为SeLinux启动并阻止docker容器从这个位置运行它的许多程序。

简短的解决方案是在添加-g参数时删除--enable-selinux选项。

答案 14 :(得分:1)

在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使用我的新目录

答案 15 :(得分:1)

我的docker版本为19.03.14。下面的链接帮助了我。

Check this Link

我在以下部分添加的/etc/docker/daemon.json文件中的

:-

 {
    "data-root": "/hdd2/docker",
    "storage-driver": "overlay2"
 }

答案 16 :(得分:1)

在AWS Ubuntu 16.04服务器上,我将Docker镜像放在一个单独的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 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

答案 17 :(得分:0)

对于17.06.0-ce-mac19版本的Mac用户,您只需在首选项选项中从用户界面移动磁盘映像位置只需更改磁盘映像的位置即可使用(通过单击移动磁盘映像)并重新启动docker。使用这种方法,我能够使用外部硬盘来存储泊坞窗图像。

答案 18 :(得分:0)

适用于2020年的用户。以下适用于Windows 10计算机:

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

enter image description here

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