堕落不振功业废,勤耕不辍日月新

Docker使用NAS存储报错解决

C/C++ hailen 72℃

一、问题现象

现网最近又有一批主机需要部署有容云,需要在主机上安装docker并load image 。不过这批虚拟机,由于存储空间的限制,把数据目录放在了EMC VNX提供的NAS存储上。前面大部分的修改都没有问题,但在执行images load时提示operation not supported 。

operation-not-supported

更改/lib/systemd/system/docker.service 文件中的ExecStart -g指定的路径为本地文件系统后,再重启docker服务,再load images文件发现可以正常启动。

二、解决问题

先测试了下往NAS存储上读取文件,发现可以正常读写文件。这就基本排除了NAS本身的问题。重启部署docker并重启主机,再次启动docker服务,发现无法正常启动。具体报错信息为:initializing graphdriver: invalid argument。见下图:

放狗查询了可能出现该问题的可能性。后来发现有–storage-driver=devicemapper 参数。修改docker的启动服务中ExecStart参数为如下内容:‘

ExecStart=/usr/bin/dockerd -g /data/docker --storage-driver=devicemapper --mtu 1400 --insecure-registry 0.0.0.0/0

其中/data为本身NAS挂载点。再次重启主机OS,发现docker服务可以自动拉起,再次docker load image文件也不再出现不支持的提示。发现问题解决,在其他主机在部署时增加同样的参数,发现可以下接部署通过。

三、总结

通过man dockerd 发现其有如下部分和文件系统相关的选项:

-s, --storage-driver=""
 Force the Docker runtime to use a specific storage driver.
--storage-opt=[]
 Set storage driver options. See STORAGE DRIVER OPTIONS.

后面也有如下的说明:Specify options to the storage backend with –storage-opt flags. The backends that currently take options are devicemapper, zfs and btrfs. Options for devicemapper are prefixed with dm, options for zfs start with zfs and options for btrfs start with btrfs. Docker在Debian,Ubuntu系的系统中默认使用aufs,在RedHat系中使用device mapper。device mapper在Linux2.6内核中被并入内核,它很稳定,也有很好的社区支持。OverlayFS与AUFS相似,被加入Linux3.18版本内核,也是一种联合文件系统(union filesystem),与AUFS相比,OverlayFS: 设计更简单;  可能更快。查看了下之前使用本地文件系统的主机,发现有容云默认使用的overfs

[root@ZJHZ-CMREAD-RQYUNDATA07-VINT-SQ yum.repos.d]# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.13.1
Storage Driver: overlay
 Backing Filesystem: extfs
 Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1
runc version: 9df8b306d01f59d3a8029be411de015b7304dd8f
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-514.el7.x86_64
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)

既然原理通了,同样也可以不修改docker启动服务,通过修改/etc/default/docker(如果没有,可以直接创建)中增加DOCKER_OPTS参数解决,具体内容如下:

DOCKER_OPTS="--storage-driver=devicemapper"

OS启动时,会自动读取/etc/default目录中的选项并加载。

更多信息也可以参考docker官方storagedriver文档

Docker使用NAS存储报错解决,首发于运维之路

转载请注明:我是IT » Docker使用NAS存储报错解决

喜欢 (0)or分享 (0)