我安装了 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 根目录:/var/snap/docker/common/var-lib-docker
最近几个月有人成功做到了这一壮举吗?
(这是我第三次安装 ubuntu,我刚刚把它弄坏了...)
显然在 Ubuntu 18.04 LTS、docker 17.06.2 上 - 它需要与 snap 一起工作,我将这样进行挖掘。我稍后会尝试回复...
常见的解决方案是移动数据并创建符号链接:
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 中。
抱歉这么晚回复。
更仔细地研究一下我的问题:
我使用的是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
。
我回来给你提供解决方案,让我能够解决这个问题。
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 中是否运行良好...)
更改 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#
我就是这样做的:
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 是我想在我的案例中使用的新目录。)
rsync -avxP /var/lib/docker/ /mnt/new/docker
重新启动守护进程:
sudo systemctl 守护进程重新加载
现在你可以重新启动你的docker了:
sudo systemctl start docker
检查是否按预期工作:
docker info | grep "Docker Root Dir"