如何在 ubuntu 18.04 LTS 上更改 docker 的根目录? (docker 更改卷的位置)

how to change root dir of docker on ubuntu 18.04 LTS? (docker change location of volumes)

我安装了 ubuntu 18.04 LTS 并检查了 docker (17.06.2-ce) 的设置以同时安装。

我通过启动 hello-world (sudo docker run hello-world) 进行了测试:

[...] 来自 Docker 的问候! 此消息表明您的安装似乎工作正常。 [...]

我在名为 /raid 的文件夹上安装了软件 raid,并在其中创建了一个文件夹 /docker-data

我尝试按照网络上的一些教程将我的 docker 的根目录更改为将其放在 /raid/docker-data/ 中...徒劳无功。

these solutions don't work either :

Docker 根目录:/var/snap/docker/common/var-lib-docker

最近几个月有人成功做到这一点吗?

(这是我第 3 次安装 ubuntu,我刚刚把它弄坏了...)


显然在 Ubuntu 18.04 LTS,docker 17.06.2 - 它需要与 snap 一起使用,我将以这种方式进行挖掘。我稍后会尝试return回答...

常见的解决方案是移动数据并创建符号链接:

systemctl stop docker
mv /var/lib/docker /raid/docker-data
ln -s /raid/docker-data /var/lib/docker
systemctl start docker

您还可以通过 /etc/docker/daemon.json 中的设置告知 docker 新位置。如果您没有此文件,您可以创建一个包含以下内容的文件:

{
  "data-root": "/raid/docker-data"
}

我会推荐第一个解决方案,因为您会发现许多第 3 方工具期望 docker 位于 /var/lib/docker。

抱歉回复晚了。

在更仔细地研究之后,来解决我的问题:

我在Ubuntu 18.04,我只能通过snap install(或remove)添加或删除docker服务docker

docker 方安装在 /var/snap/

所以我像这样转置你的解决方案:

mv /var/snap/ /raid/snap
ln -s /raid/snap /var/snap

最后我通过 snap install docker

安装 docker

我用 sudo docker info 进行了测试,但出现了以下错误消息:

cannot perform operation: mount --rbind /var/snap /tmp/snap.rootfs_RRAjdq//var/snap: Permission denied

snap.rootfs_* 因为每次命令启动时末尾都不会停止变化)

但安装很顺利,有些 docker 显然是在 /raid/snap

我回来找你给你解决这个问题的方法。

cannot perform operation: mount --rbind /var/snap /tmp/snap.rootfs_RRAjdq//var/snap: Permission denied

我知道为什么:https://bugs.launchpad.net/snapcraft/+bug/1620771

When /home is a symlink snaps don't work.

When /home is a real directory snaps work, see output below

就我而言:

当 /raid/snap 是符号链接快照时不起作用。

当 /var/snap 是一个真正的目录快照时。

我删除了docker。我不得不重新安装 snapcraf (snapd),因为我对它进行了文件修改(错误的方式)

从那里,我停止了 snapd 服务:

sudo mv /var/snap/ /raid/snap
sudo mount --rbind /raid/snap /var/snap

我启动了snapd服务

sudo snap install docker

sudo docker info <= 测试

sudo docker run hello-world <= 测试

我在 fstab 上修复了我的坐骑:

/raid/snap      /var/snap      none      bind

我重新启动了我的 OS :它起作用了,至少对我来说是这样。 (我一直在检查这个文件一致性处理,看看 docker 文件在 raid 中是否运行良好...

更改Docker根存储(数据路径):

运行这条命令查找docker数据路径:

$ sudo docker info | grep -i root

默认路径:

root@user-testing-HP-ProBook-4540s:/etc/docker# docker info | grep -i root
 Root Dir: /var/lib/docker/aufs
WARNING: No swap limit support
Docker Root Dir: /var/lib/docker

首先,停止 docker:

sudo service docker stop

将正确的数据路径复制到新路径:

sudo rsync -aqxP /var/lib/docker /data/docker-data/

在 (/etc/docker/daemon.json) 文件中添加以下内容: (如果文件不存在,请使用 vim 或您最喜欢的编辑器创建文件(sudo vim /etc/docker/deamon.json))

{
  "data-root": "/data/docker-data/docker"
}

符合 cat 命令:

cat /etc/docker/deamon.json

输出将是这样的:

root@user-testing-HP-ProBook-4540s:/home/user/Downloads# cat /etc/docker/daemon.json 
{
  "data-root": "/data/docker-data/docker"
}

root@user-testing-HP-ProBook-4540s:/home/user/Downloads# 

开始docker:

sudo service docker start

现在检查根(数据路径)路径:

$ sudo docker info | grep -i root

输出将是这样的:

root@user-testing-HP-ProBook-4540s:/home/user/Downloads# sudo docker info | grep -i root
 

Root Dir: /data/docker-data/docker/aufs
WARNING: No swap limit support
Docker Root Dir: /data/docker-data/docker

root@user-testing-HP-ProBook-4540s:/home/user/Downloads#