Docker

如何在單個 Pod 中的兩個容器之間通過程式碼文件共享卷?

  • June 18, 2019

我創建了一個 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

但是當我連接到容器並 ls 進入這個目錄時,它沒有顯示任何數據。我希望將該程式碼複製到該卷中。怎麼做??

/app_api兩個容器中的目錄都是空的,因為您在其上安裝了 emptyDir(出於某種原因,它被稱為“空”)。

您有兩種方法可以在容器之間“共享”文件:

  • 在建構階段將文件添加到兩個圖像(nginx 和 django),並且不要在 pod 中使用卷。從技術上講,您將擁有 2 個不同的數據副本,因此一個容器中的更改不會應用於另一個容器。
  • 添加初始化容器,該容器將在 pod 啟動時將內容從鏡像複製到 emptyDir 卷。像這樣的東西(注意它不會從根目錄複製“點文件” /app_api/):
initContainers:
- name: init
 image: nginx
 command: ["cp" "-pr" "/app_api/*" "/universal/"]
 volumeMounts:
 - name: universal
   mountPath: /universal

引用自:https://serverfault.com/questions/971888