无法使用 initContainers 访问卷内容

Unable to access volume content using initContainers

我有一个简单的图像 (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: {}

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

非常感谢

您的初始化容器没有做任何事情:Docker文件没有 CMD 并且 Kubernetes 部署规范也没有设置 command:。它启动并立即退出。 (基本 Linux 分发映像通常有一个默认命令来启动交互式 shell,但如果没有 tty,这也会立即退出。)

与此同时,您的 Kubernetes 设置还在您放入映像的唯一内容上安装了一个空目录,这会阻止 init 容器发挥作用。

您可以构建自定义 nginx 图像,直接复制以下内容:

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

不要使用 initContainers:,并将该图像用作主要 containers: 图像。

有一个特定于 Docker 的功能,使用 Docker 命名卷,可以在首次使用时填充命名卷,您可能正在考虑此功能。这有几个重要的注意事项(它仅在您第一次 运行 容器时生效,并忽略对图像的更新;它不适用于绑定安装)。这是一个普通的 Docker 特定功能:Kubernetes 永远不会为您自动填充卷。

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

唯一的方法是在安装完成后填充目录。