• 0x1
  • 0x2
  • 0x3
  • 首页
  • 归档

docker如何更改数据存储目录

  • yuc
  • 2023-06-20
  • 2023-06-28
  • 浏览:76
  • 0

0x1

不管是docker单节点,还是集群,每一个docker主机都是有自己的数据存储目录的,docker默认的数据存储目录是/var/lib/docker,有时候根分区比较小,我们又不想单独挂载此目录,这时候应该怎么办呢?

0x2

可以根据官方的方案,启动之前增加参数,以指定docker的数据存储目录,流程大致如下:

  1. docker 刚安装完未启动
  2. 增加docker配置文件目录 /etc/docker
  3. 增加docker数据存储目录 /data/docker
  4. 新建文件 /etc/docker/daemon.json ,并且增加内容
    {
    "registry-mirrors": ["http://hub-mirror.c.163.com"],
    "data-root": "/data/docker"
    }

    这里第二个参数 data-root 即是指定数据目录

0x3

docker service create 的时候报错,无法拉取镜像:

could not be accessed on a registry to record its digest. Each node will access independently, possibly leading to different nodes running different versions of the image

之后创建步骤一直提示找不到镜像,查看 /var/log/messages 日志,显示协议是https,并且提示没有权限访问仓库。这里做了如下测试和尝试的解决办法:

  1. 手动 docker pull/push 镜像,所有节点都无问题,所以本机认证是没有问题的
  2. 测试 docker login hub.xxx.com 也无问题,说明 harbor 仓库是没有问题
  3. 之前没有证书所以harbor只开启了 http 协议,并且 /var/log/messages 也提示了一些 https关键字,所以修改harbor自签证书增加 https,但仍然不行
  4. 在 /etc/docker/daemon.json` 中增加 `insecure-registries 也不行

最后无奈,查看手动 docker pull` 和 `docker service create 的时候 harbor 的相关日志,确实发现了问题,在 harbor 的 nginx 代理日志中,正常拉取的时候返回值正常,请求大小是镜像大小,但是异常的pull响应都是401

最后
根据权限问题找了很多帖子,没有很好的解决办法,最后只能使用一个规避方法,增加 --with-registry-auth 参数,格式大概如下:

docker service create \
    --name xxx \
    --network mynets \
    --mode global \
    --with-registry-auth \
    harbor.xxx.com/xxx/xxx/xxx

这样创建容器,测试多次都正常了

© 2023
Theme by Wing
  • {{ item.name }}
  • {{ item.name }}