我有一個 Dockerfile,用于部署帶有一些秘密 api 密鑰的節點 js 應用程式,我想從 docker 檔案中隱藏這些密鑰。目前我正在使用ENV關鍵字來定義環境變數,如下所示
FROM node:17
WORKDIR /usr/app
COPY package.json /usr/app/
RUN npm install
COPY . /usr/app
ENV TWILIO_ACCOUNT_SID=""
ENV TWILIO_AUTH_TOKEN=""
ENV OTP_TEXT="This is your Otp"
ENV TWILLIO_SENDER=99999
ENV PORT=8080
ENV DB_URL=""
ENV JWT_SECRET="Some Secrete"
ENV JWT_EXPIRES_IN=30min
ENV OTP_EXPIRE_TIME_SECONDS=150000
ENV AWS_S3_REGION = us-east-2
ENV AWS_S3_BUCKET = gos32
ENV AWS_ACCESS_KEY_ID =""
ENV AWS_SECRET_ACCESS_KEY =""
CMD ["npm", "start"]
有沒有更好的方法來做到這一點?
編輯 :
只需從@blami 給出的答案中添加什么對我有用
docker build -t app .
然后我跑了
docker run --env-file env.txt -d -p 8080:8080 app
將所有環境變數放入env.txt檔案后,docker 使用檔案選項運行
uj5u.com熱心網友回復:
你根本不應該把敏感資料放在 Dockerfile 中。如果您的應用程式是通過環境配置,當手動啟動例如,你應該只提供這些變數容器(使用docker -e,--env以及--env-file直接在命令列標志),或通過您的容器運行時(你不要在你的問題具體說明):
- Kubernetes 可以管理秘密并通過檔案或環境變數公開它們 - 請參閱帶有示例的檔案
- Docker Swarm 支持通過
docker secret命令開箱即用地管理機密,并且也可以將此類機密公開為環境變數 - 請參閱帶有示例的檔案 - 托管云提供商通常可以選擇管理機密并以某種方式將它們注入容器(或直接公開它們使用的運行時功能)。
在上述任何一種情況下,秘密通常都存在于安全存盤中,只有在容器啟動并注入其中時才會從那里檢索它們。這樣你就不需要在 Dockerfile 中擁有它們。請注意,如果有人使用應用程式或更高權限訪問您正在運行的容器,他們將能夠從環境中檢索機密(因為這就是環境變數的作業方式)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/382113.html
標籤:码头工人
