无法使用initContainers访问卷内容

时间:2020-06-03 09:55:35

标签: kubernetes docker-volume

我有一个简单的图像(mdw:1.0.0),其中包含一些内容:

FROM alpine:3.9
COPY /role /mdw
WORKDIR /mdw

我希望我的容器'nginx'可以看到/ mdw文件夹的内容,但是没有文件。

apiVersion: v1
kind: Pod
metadata:
 name: init-demo
spec:
 initContainers:
 - name: install
   image: mdw:1.0.0
   imagePullPolicy: Never
   volumeMounts:
   - name: workdir
     mountPath: "/mdw"
 containers:
 - name: nginx
   image: nginx
   volumeMounts:
   - name: workdir
     mountPath: /mdw
   command: ["ls", "-l", "/mdw"]
 volumes:
 - name: workdir
   emptyDir: {}

您知道原因是什么以及如何解决它吗?

非常感谢您

2 个答案:

答案 0 :(得分:2)

在安装卷时,如果目录已经存在,将被擦除。这是故意的,没有真正的解决办法。

唯一的方法是在挂载完成后填充目录。

答案 1 :(得分:1)

您的初始化容器不执行任何操作:Dockerfile没有CMD,而Kubernetes部署规范也没有设置command:。它开始并立即退出。 (基本的Linux发行映像通常具有启动交互式shell的默认命令,但是如果没有tty,它也将立即退出。)

与此同时,您的Kubernetes设置还在您放入映像的唯一内容上安装了一个空目录,这防止了初始化容器起作用。

您可以构建自定义的nginx图片,直接将内容复制到:

FROM nginx
COPY /role /usr/share/nginx/html

请勿使用initContainers:,并将该图像用作主要的containers:图像。

有一个特定于Docker的功能,使用Docker命名卷,可以在首次使用时填充命名卷,您可能会想到此功能。这带来了一些重要的警告(仅在您第一次运行容器时才生效,并且忽略对映像的更新;它不适用于绑定安装)。这是Docker的一项普通功能:Kubernetes永远不会为您自动填充卷。