无法使用 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 永远不会为您自动填充卷。
如果目录已经存在,则挂载卷时将被擦除。这是故意的,真的没有解决办法。
唯一的方法是在安装完成后填充目录。
我有一个简单的图像 (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 永远不会为您自动填充卷。
如果目录已经存在,则挂载卷时将被擦除。这是故意的,真的没有解决办法。
唯一的方法是在安装完成后填充目录。