如何从docker文件中隐藏环境变量

gAN*_*ALF 3 docker

我有一个 Dockerfile,用于部署带有一些秘密 api 密钥的 Node 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"]
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?

编辑 :

只需添加 @blami 给出的答案中的“什么对我有用”

docker build -t  app . 
Run Code Online (Sandbox Code Playgroud)

然后我跑了

docker run --env-file env.txt  -d -p 8080:8080  app
Run Code Online (Sandbox Code Playgroud)

将所有环境变量放入env.txt文件后,使用文件选项运行 docker

bla*_*ami 5

您根本不应该将敏感数据放入 Dockerfile 中。如果您的应用程序是通过环境配置的,则您应该仅在容器启动时向容器提供这些变量,例如手动(使用docker -e--env--env-file标志)或通过容器运行时(您在问题中未指定):

  • Kubernetes 可以管理秘密并通过文件或环境变量公开它们 - 请参阅带有示例的文档
  • Docker Swarm 支持通过命令开箱即用地管理机密docker secret,并且也可以将此类机密公开为环境变量 - 请参阅带有示例的文档
  • 托管云提供商通常可以选择管理机密并以某种方式将它们注入到容器中(或直接公开他们使用的运行时功能)。

在任何情况下,上述秘密通常都存在于安全存储中,只有当容器启动并注入其中时,才会从那里检索它们。这样你就不需要将它们放在 Dockerfile 中。请注意,如果有人使用应用程序或更高权限访问您正在运行的容器,他们将能够从环境中检索机密(这就是环境变量的工作方式)。