据我所知,当docker映像被拉出来时,它们被安装到/var/lib/docker中。是否有办法改变这个位置,比如到一个挂载的卷,比如/mnt?


当前回答

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

但如果docker作为系统服务启动,则不建议修改/etc/default/docker文件。这里有一个指南。

正确的方法是创建/etc/docker/daemon.json文件在Linux(或Mac)系统或%programdata%\docker\config\daemon。json。如果这个文件没有被用于其他用途,那么以下字段就足够了:

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

这是假设你想让docker持久化它的数据的新位置是/docker/daemon_files

其他回答

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

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

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

对于17.06.0-ce-mac19版本的Mac用户,您可以简单地从用户界面的首选项选项中移动磁盘映像位置,只需更改磁盘映像的位置,它就会工作(通过单击移动磁盘映像)并重新启动docker。使用这种方法,我可以使用外部硬盘来存储docker图像。

在一台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

在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中

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