如何在单个 Pod 中的两个容器之间共享包含代码文件的卷?

如何在单个 Pod 中的两个容器之间共享包含代码文件的卷?

我创建了一个 GKE 集群,并在其中使用此 yaml 设置创建了带有 2 个容器的单个 pod。

apiVersion: v1
kind: Pod
metadata:
  name: django-nginx
spec:

  restartPolicy: Never

  volumes:
  - name: universal
    emptyDir: {}

  containers:

  - name: nginx
    image: nginx
    volumeMounts:
    - name: universal
      mountPath: /app_api

  - name: django
    image: django
    volumeMounts:
    - name: universal
      mountPath: /app_api

我在构建图像时输入了应用程序代码Dockerfile,其中一部分在这里

FROM nginx
COPY ./app_api /app_api

但是当我连接到容器并进入该目录时,它没有显示任何数据。我希望将该代码复制到该卷。该怎么做?

答案1

/app_api两个容器中的目录都是空的,因为您在其上安装了 emptyDir (它之所以被称为“空”是有原因的)。

您有两种方法可以在容器之间“共享”文件:

  • 在构建阶段将文件添加到两个镜像(nginx 和 django)中,并且不要在 pod 中使用卷。从技术上讲,您将拥有 2 份不同的数据副本,因此一个容器中的更改不会应用于另一个容器。
  • 添加初始化容器这会将内容从镜像复制到 emptyDir 卷,在 pod 启动时。类似这样(请注意,它不会从根目录复制“点文件” /app_api/):
    initContainers:
    - name: init
      image: nginx
      command: ["cp" "-pr" "/app_api/*" "/universal/"]
      volumeMounts:
      - name: universal
        mountPath: /universal
    

相关内容