我有一个简单的图像(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: {}
您知道原因是什么以及如何解决它吗?
非常感谢您
答案 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永远不会为您自动填充卷。