OCI runtime create failed:

/var/lib/docker/overlay2/6573e40fef5bc51b4e565ad9554f225806f05a9f9089cc9e210c0e35a80e6e1f/merged/etc/resolv.conf: read-only

报错信息

1
2
3
4
5
6
7
8
9
Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused
"process_linux.go:424: container init caused \"rootfs_linux.go:58: mounting
\\\"/var/lib/docker/containers/1ec387b2e168281ed480c5050b08893976ac84a2751691e1a9429ae6a66a788a/resolv.conf\\\" to rootfs
\\\"/var/lib/docker/overlay2/6573e40fef5bc51b4e565ad9554f225806f05a9f9089cc9e210c0e35a80e6e1f/merged\\\" at
\\\"/var/lib/docker/overlay2/6573e40fef5bc51b4e565ad9554f225806f05a9f9089cc9e210c0e35a80e6e1f/merged/etc/resolv.conf\\\"
caused \\\"open
/var/lib/docker/overlay2/6573e40fef5bc51b4e565ad9554f225806f05a9f9089cc9e210c0e35a80e6e1f/merged/etc/resolv.conf: read-only
file system\\\"\"": unknown

分析

主要是这个报错信息很奇怪,一开始没有往挂载目录上的问题去想,没想到会是这个方向的上的错误

https://github.com/kubernetes/kubernetes/issues/63477

使用 configmap 挂载目录的时候挂载到了 /etc 目录下面,而这个目录是 read-only 的,所以报错了。重新选择挂载目录或者挂载单个文件就可以了。

1
2
3
4
volumeMounts:
- name: config-volume
mountPath: /etc/conf.yaml
subPath: conf.yaml

其实建议还是最好不要挂 etc 目录,后面可能也会有问题的