Docker
如何將 .env 文件呼叫到在 K8s 伺服器上的 Docker 容器中執行的 Django 項目中?
我很可能只需要一個正確方向的提示。
我有一個使用 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
文件儲存為Secret
withkubectl
$$ 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
。