【发布时间】:2019-04-29 19:42:54
【问题描述】:
我的 Pod 中有两个容器:
- 基于我自己的 Dockerfile 的容器 A。在这个 Dockerfile 里面,有
COPY ./files /my-files命令。此图像位于我的 GitLab Docker 注册表中。 - 容器 B 基于来自 hub.docker.com 的图像。
我想将存储在 /my-files 中的容器 A 中的数据共享到容器 B。我认为我需要在这个 pod 和 volumeMounts 内创建一个 volume(它不是持久数据)到容器。
不幸的是,当我使用 mountPath: /my-files 将 volumeMounts 添加到容器 A 时,此目录已清空,并且在创建映像时没有添加任何文件。
我应该怎么做才能保留这些数据并与容器 B 共享。
这是我的 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: {}
【问题讨论】:
-
当您在 k8s 容器中挂载时,挂载的卷将“隐藏”该位置已存在的任何内容。这是什么数据?听起来您需要为它创建一个 configmap,或者您需要在创建 pod 和容器之前将其复制到两个映像中。
-
我正在使用 PHP-FPM 和 Apache 创建一个 PHP 应用程序。第一个容器基于 PHP-FPM。我将应用程序的所有数据复制到 /var/www/html 中。第二个是Apache指向FPM。但是两个容器都需要 /var/www/html 目录中的相同文件。可悲的是,没有“标志”告诉保留这些文件并在已安装的卷中复制。
-
您只是想让 Apache 充当 PHP-FPM 的反向代理吗?如果是这样,要做的事情是使用端口映射让 Apache 与您的 PHP 容器对话,而不是直接共享任何内容。您的 Apache 容器会从 configmap 获取它的配置,然后在某个任意端口(例如
8080)上直接向您的应用容器发出请求。 -
如果您真的需要在两个容器之间共享静态内容,您需要将该内容构建到两个图像中(在这种情况下,它们可能会在后台共享层),或者将该内容存储在一些其他系统,例如 S3 存储桶,然后通过卷挂载将其映射到您的容器中。
标签: kubernetes