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

问题描述 投票:0回答:5

我安装了 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/
...但徒劳。

这些解决方案也不起作用

  • /etc/default/docker
    :我找不到这个
  • 如第二个解决方案:docker找不到他的文件夹。

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

最近几个月有人成功做到了这一壮举吗?

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


显然在 Ubuntu 18.04 LTS、docker 17.06.2 上 - 它需要与 snap 一起工作,我将这样进行挖掘。我稍后会尝试回复...

docker ubuntu-18.04
5个回答
10
投票

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

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"
}

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


1
投票

抱歉这么晚回复。

更仔细地研究一下我的问题:

我使用的是Ubuntu 18.04,我只能通过

snap install
(或
remove
docker
添加或删除docker服务。

一个 docker party 安装在

/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


1
投票

我回来给你提供解决方案,让我能够解决这个问题。

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

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

当 /home 是符号链接时,快照不起作用。

当 /home 是一个真正的目录快照工作时,请参阅下面的输出

就我而言:

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

当 /var/snap 是真实目录时,snap 起作用。

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

从那里,我停止了快照服务:

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

我启动了 snapd 服务。

sudo snap install docker

sudo docker info
<= to test

sudo docker run hello-world
<= to test

我在 fstab 上修复了我的安装:

/raid/snap      /var/snap      none      bind

我重新启动了我的操作系统:它有效,至少对我来说是这样。 (我检查了整个文件一致性处理,以查看 docker 文件在 raid 中是否运行良好...


1
投票

更改 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# 

启动泊坞窗:

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# 

0
投票

我就是这样做的:

  1. 首先我停止了 docker 服务和套接字。

sudo systemctl stop docker.service

sudo systemctl stop docker.socket

2.然后我进入docker的systemd文件并添加新目录的位置:

sudo vim /lib/systemd/system/docker.service

我们需要编辑该行,如下所示: ExecStart=/usr/bin/dockerd -H fd://

通过添加 --data-root 来编辑该行,例如:

ExecStart=/usr/bin/dockerd --data-root /mnt/new/docker -H fd:// --containerd=/run/containerd/containerd.sock

(/mnt/new/docker 是我想在我的案例中使用的新目录。)

  1. 然后使用 rsync 命令将旧的 docker 根路径与新的 docker 根路径同步:

rsync -avxP /var/lib/docker/ /mnt/new/docker

  1. 重新启动守护进程:

    sudo systemctl 守护进程重新加载

现在你可以重新启动你的docker了:

sudo systemctl start docker    

检查是否按预期工作:

docker info | grep "Docker Root Dir"  
© www.soinside.com 2019 - 2024. All rights reserved.