0x1
不管是docker单节点,还是集群,每一个docker主机都是有自己的数据存储目录的,docker默认的数据存储目录是/var/lib/docker,有时候根分区比较小,我们又不想单独挂载此目录,这时候应该怎么办呢?
0x2
可以根据官方的方案,启动之前增加参数,以指定docker的数据存储目录,流程大致如下:
- docker 刚安装完未启动
- 增加docker配置文件目录 /etc/docker
- 增加docker数据存储目录 /data/docker
- 新建文件 /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
之后创建步骤一直提示找不到镜像,查看
日志,显示协议是https,并且提示没有权限访问仓库。这里做了如下测试和尝试的解决办法:/var/log/messages
- 手动
镜像,所有节点都无问题,所以本机认证是没有问题的docker pull/push
- 测试
也无问题,说明 harbor 仓库是没有问题docker login hub.xxx.com
- 之前没有证书所以harbor只开启了 http 协议,并且
也提示了一些 https关键字,所以修改harbor自签证书增加 https,但仍然不行/var/log/messages
- 在
也不行/etc/docker/daemon.json
`中增加
`insecure-registries
最后无奈,查看手动
的时候 harbor 的相关日志,确实发现了问题,在 harbor 的 nginx 代理日志中,正常拉取的时候返回值正常,请求大小是镜像大小,但是异常的pull响应都是401docker pull
` 和
`docker service create
最后
根据权限问题找了很多帖子,没有很好的解决办法,最后只能使用一个规避方法,增加 --with-registry-auth 参数,格式大概如下:
docker service create \
--name xxx \
--network mynets \
--mode global \
--with-registry-auth \
harbor.xxx.com/xxx/xxx/xxx
这样创建容器,测试多次都正常了