将数据从一个Kubernetes容器共享到同一吊舱内的另一个容器

将数据从一个Kubernetes容器共享到同一吊舱内的另一个容器,kubernetes,Kubernetes,我的吊舱里有两个容器: 容器A基于我自己的Dockerfile。在这个Dockerfile中,有一个COPY./files/my files命令。此图像位于我的GitLab Docker注册表中 容器B基于hub.docker.com上的图像 我想将存储在/my文件中的容器A中的数据共享到容器B。我想我需要在这个pod中创建一个卷(它不是持久化数据),并将卷数共享到容器 initContainers: - name: init-config-data-copy-wait

我的吊舱里有两个容器:

  • 容器A基于我自己的Dockerfile。在这个Dockerfile中,有一个
    COPY./files/my files
    命令。此图像位于我的GitLab Docker注册表中
  • 容器B基于hub.docker.com上的图像
我想将存储在/my文件中的容器A中的数据共享到容器B。我想我需要在这个pod中创建一个
(它不是持久化数据),并将
卷数
共享到容器

  initContainers:
    - name: init-config-data-copy-wait
      image: datacontainer
      command:
        - sh
        - "-ce"
        - |
          set -ex
          cp -r /src-data/* /dst-data/
          ls /dst-data/
      volumeMounts:
        - mountPath: /dst-data
          name: dst-data-volume

  volumes:
    - name: dst-data-volume
      emptyDir: {}
不幸的是,当我将
volumeMounts
添加到带有
mountPath:/my files
的容器中时,此目录被清空,并且在创建映像时没有添加任何文件

我应该如何保存此数据并将其与容器B共享

这是my Deployment.yaml文件的一部分:

containers:
- name: Container-A
  image: "my-gitlab-registry/my-image-a-with-copied-files"
  volumeMounts:
    - name: shared-data
      mountPath: /my-files
- name: Container-B
  image: "some-public-image"
  volumeMounts:
  - name: shared-data
    mountPath: /files-from-container-a

volumes:
- name: shared-data
  emptyDir: {}

一个丑陋的黑客,使用init容器,将数据复制到emptyDir卷,然后将卷装入第二个容器

  initContainers:
    - name: init-config-data-copy-wait
      image: datacontainer
      command:
        - sh
        - "-ce"
        - |
          set -ex
          cp -r /src-data/* /dst-data/
          ls /dst-data/
      volumeMounts:
        - mountPath: /dst-data
          name: dst-data-volume

  volumes:
    - name: dst-data-volume
      emptyDir: {}

一个丑陋的黑客,使用init容器,将数据复制到emptyDir卷,然后将卷装入第二个容器

  initContainers:
    - name: init-config-data-copy-wait
      image: datacontainer
      command:
        - sh
        - "-ce"
        - |
          set -ex
          cp -r /src-data/* /dst-data/
          ls /dst-data/
      volumeMounts:
        - mountPath: /dst-data
          name: dst-data-volume

  volumes:
    - name: dst-data-volume
      emptyDir: {}

当您装入k8s容器内时,装入的卷将“隐藏”该位置中已存在的任何内容。这是什么样的数据?听起来要么你需要为它创建一个configmap,要么你需要在创建pod和容器之前将它复制到两个图像中。第一个容器基于PHP-FPM。我将应用程序的所有数据复制到/var/www/html中。第二个是指向FPM的Apache。但这两个容器在/var/www/html目录中需要相同的文件。令人遗憾的是,没有“标志”告诉您如何保存这些文件并在装入的卷中进行复制。您是否只是希望Apache充当PHP-FPM的反向代理?如果是这样,那么要做的事情就是使用端口映射让Apache与您的PHP容器通信,而不是直接共享任何内容。您的Apache容器将从configmap获取其配置,然后在一些任意端口上直接向您的应用程序容器发出请求,如
8080
。如果您确实需要在两个容器之间共享静态内容,则需要将该内容构建到两个图像中(在这种情况下,他们可能会在幕后共享层),或者将该内容存储在其他系统(如S3 bucket)中,然后通过卷装载将其映射到您的容器中。当您装载到k8s容器中时,装载的卷将“隐藏”该位置中已经存在的任何内容。这是什么类型的数据?听起来要么需要为其创建configmap,要么需要在创建pod和容器之前将其复制到两个图像中。我正在使用PHP-FPM和Apache创建一个PHP应用程序。第一个容器基于PHP-FPM。我在/var/ww中复制应用程序的所有数据第二个是指向FPM的Apache。但是两个容器在/var/www/html目录中需要相同的文件。遗憾的是,没有“标志”告诉您保留这些文件并在装入的卷中进行复制。您只是想让Apache充当PHP-FPM的反向代理吗?如果是这样,那么可以使用端口映射让Apache与您的PHP容器通信,而不是直接共享任何内容。您的Apache容器将从configmap获取其配置,然后直接发出请求在某些任意端口(如
8080
)上复制到应用程序容器。如果确实需要在两个容器之间共享静态内容,则需要将该内容构建到两个图像中(在这种情况下,它们可能会在幕后共享层),或将该内容存储在其他一些系统(如S3存储桶)中,然后通过卷装载将其映射到容器中。