尝试更改docker数据根失败-为什么

时间:2019-03-25 19:09:46

标签: docker debian

我正在尝试将docker存储目录设置为默认值,这是我在其他计算机上完成的操作:

/etc/docker/daemon.json:

{
    "data-root": "/mnt/x/y/docker_data"
}

存储目录类似于

jeremyr@snorble:~$ ls -ltr /mnt/x/y
total 4
drwxrwxrwx 11 jeremyr  5001  122 Mar 19 08:14 docker_data

在放置daemon.json文件的情况下,sudo systemctl restart docker命中Job for docker.service failed(如果没有daemon.json,则docker可以正常重启,而docker run hello-world可以正常运行)。放置daemon.json后,journalctl -xn显示

Mar 25 14:20:33 bolt88 systemd[1]: docker.service start request repeated too quickly, refusing to start.
Mar 25 14:20:33 bolt88 systemd[1]: Failed to start Docker Application Container Engine.
-- Subject: Unit docker.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit docker.service has failed.
-- 
-- The result is failed.
Mar 25 14:20:33 bolt88 systemd[1]: Unit docker.service entered failed state.
Mar 25 14:20:34 bolt88 sudo[23961]: jeremyr : TTY=pts/18 ; PWD=/home/jeremyr ; USER=root ; COMMAND=/bin/journalctl -xn
Mar 25 14:20:34 bolt88 sudo[23961]: pam_unix(sudo:session): session opened for user root by jeremyr(uid=0)

systemctl status docker.service仅显示code=exited, status=1/FAILURE

在dmesg中,我看到了:

1547:[Mon Mar 25 14:21:41 2019] aufs au_opts_verify:1570:dockerd[20714]: dirperm1 breaks the protection by the permission bits on the lower branch
1548-[Mon Mar 25 14:21:41 2019] device veth34d1dfd entered promiscuous mode
1549-[Mon Mar 25 14:21:41 2019] IPv6: ADDRCONF(NETDEV_UP): veth34d1dfd: link is not ready
1550-[Mon Mar 25 14:21:41 2019] IPv6: ADDRCONF(NETDEV_CHANGE): veth34d1dfd: link becomes ready
1551:[Mon Mar 25 14:21:41 2019] docker0: port 1(veth34d1dfd) entered forwarding state
1552:[Mon Mar 25 14:21:41 2019] docker0: port 1(veth34d1dfd) entered forwarding state
1553:[Mon Mar 25 14:21:41 2019] docker0: port 1(veth34d1dfd) entered disabled state
1554-[Mon Mar 25 14:21:41 2019] device veth34d1dfd left promiscuous mode
1555:[Mon Mar 25 14:21:41 2019] docker0: port 1(veth34d1dfd) entered disabled state
1556-[Mon Mar 25 14:21:59 2019] systemd-sysv-generator[20958]: Ignoring creation of an alias umountiscsi.service for itself

Docker版本17.05.0-ce,内部版本89658be,基于debian 8.8设置。

有人知道为什么docker不允许将该目录用作数据根吗?

4 个答案:

答案 0 :(得分:2)

docker_data上的某处关闭。

  • 解决方案:

    1. 删除/etc/docker/daemon.json文件。
    2. 启动docker。
    3. 将/ var / lib / docker内容复制到您在/etc/docker/daemon.json中放置的路径。
    4. 放回文件/etc/docker/daemon.json并重新启动docker。

答案 1 :(得分:0)

好吧,我不是Docker的专家,但是我在您的日志中看到“ dirperm1通过较低分支的权限位破坏了保护”。我也看到了这一点。 “ drwxrwxrwx 11杰里米5001 122 Mar 19 08:14 docker_data”

据我所知,docker守护进程需要对该目录的访问权限。 5001代表“泊坞窗”组吗?

但是,如果您以root权限运行守护程序,则不应发生。

答案 2 :(得分:0)

TD; DR-在发布前就在Ubuntu 18.04上工作

按照说明进行操作:

sudo systemctl stop docker
sudo rsync -axPS /var/lib/docker/ /mnt/x/y/docker_data #copy all existing data to new location
sudo vi /lib/systemd/system/docker.service # or your favorite text editor

在文件 docker.service 中找到这样的一行:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

向其中添加--data-root /mnt/x/y/docker_data(一行):

ExecStart=/usr/bin/dockerd --data-root /mnt/x/y/docker_data -H fd:// --containerd=/run/containerd/containerd.sock

保存并退出,然后

sudo systemctl daemon-reload
sudo systemctl start docker
docker info | grep "Root Dir"

最后一个命令应输出:Docker Root Dir: /mnt/x/y/docker_data

就这样,应该在这里完成。


太长版本,如果您想要阅读

经过一番调查,我发现了一些过时的文章,包括这篇文章,他们提到了一些有信心的解决方案,这些都是典型的页面:

在大约十二个网页上阅读这些解决方案,并得到启发:

是的,graph => data-root,而--graph只是-g的长形式,因此我在解决方案add -g option in docker.service中尝试了这种替换,和 Ta da〜

答案 3 :(得分:0)

检查您机器的 docker 版本

% Training sample of 15 points P = [-4 -2 -4 -3 6 6 8 7 -2 -4 -2 -3 3 5 4 6; -2 -2 -4 -4 9 6 6 4 6 4 4 2 -1 -1 -3 1]; % Results of classification of training sample points T1 = [1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0]; % Classification I (left to right) T2 = [0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0]; % Classification II (top-down)

我遇到了同样的问题,在将 docker 升级到可用的最新版本后它得到了解决。

即使是 docker 官网上的文档也没有提到类似的东西。

升级 docker 后, 通过

重启docker

docker --version

错误将消失,新的更改将开始反映。