Docker

如何將 .env 文件呼叫到在 K8s 伺服器上的 Docker 容器中執行的 Django 項目中?

  • April 2, 2022

我很可能只需要一個正確方向的提示。

我有一個使用 gunicorn 和 nginx 執行 Django 應用程序的 docker 容器。此 Django 應用程序目前正在從 .env 文件中獲取其環境變數。

FROM python:alpine
EXPOSE 8000

RUN apk update
RUN apk add --no-cache git gcc musl-dev libffi-dev libxml2-dev libxslt-dev gcc swig g++
RUN apk add --no-cache jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-  dev tk-dev tcl-dev
RUN apk add --no-cache bash ffmpeg libmagic
RUN python3 -m pip install --upgrade pip
RUN python3 -m pip install --upgrade setuptools

RUN mkdir /opt/app
WORKDIR /opt/app
COPY . .
RUN python3 -m pip install /root/d12f/

RUN pip3 install -r requirements.txt
RUN pip3 install gunicorn
CMD sh -c 'gunicorn --conf python:app.gunicorn_conf app.wsgi --bind 0.0.0.0:8000 --reload --log-level info --access-logfile - --timeout 360 --error-logfile -'

當然,repo 中沒有 .env 文件,因為這會帶來安全風險。

Docker 映像由 github 創建並儲存在私有 GitHub 包中。稍後,這個 docker 鏡像被用於在 Kubernetes 上執行。

我正在嘗試找到將 .env 文件放入的最佳解決方案

/opt/app/app/.env

作為本地文件。

如果可能的話,我寧願不使用全域環境變數。

感謝您的任何建議。

稍後,這個 docker 鏡像被用於在 Kubernetes 上執行。

.env文件儲存為Secretwithkubectl $$ 1 $$:

kubectl create secret generic app-env --from-file=.env=/path/to/your/.env

然後您可以在定義中將其掛載Secret為卷Pod$$ 2 $$,$$ 3 $$:

---
apiVersion: v1
kind: Pod
...
spec:
 containers:
   ...
 - name: app
   image: your-image:tag
   volumeMounts:
   - name: app-env-vol            # mount volume name
     mountPath: /opt/app/app      # to /opt/app/app
     readOnly: true               # as read-only
   ...
 volumes:
   ...
 - name: app-env-vol              # create app-env volume
   secret:
     secretName: app-env          # with secret name.
   ...

您的應用程序應該能夠訪問它env的 s in /opt/app/app/.env

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