我有一个节点应用程序dotenv
用于跟踪环境变量。它使用.env
根文件夹中的文件在运行时获取变量。问题是当我使用 docker 构建节点图像时,下面的行.env
也会复制构建文件
FROM node:latest
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# Bundle app source
COPY . /usr/src/app
EXPOSE 8000
Run Code Online (Sandbox Code Playgroud)
如果我从 dockerhub 构建和拉取图像。该文件已包含.env
我在开发中使用的文件。理想情况下,我想.env
为生产指定一个不同的文件。(也许在生产服务器中手动创建一个新的 .env 文件)
我尝试.env
在 dockerignore 中指定文件。但 lineCOPY . /usr/src/app
似乎仍然复制了 env 文件。
我不需要这样使用dotenv
。我试着像下面那样指定它
version: '2'
services:
node:
container_name: node
build: .
env_file: .env
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
command: npm start
Run Code Online (Sandbox Code Playgroud)
所以我真的不需要在构建中指定一个 .env 文件夹。但这也行不通。
如何阻止COPY
命令复制.env
文件?
有一个文件!
在 docker CLI 将上下文发送到docker守护进程之前,它会在上下文的根目录中查找名为.dockerignore的文件。如果此文件存在,CLI 会修改上下文以排除与其中的模式匹配的文件和目录。这有助于避免不必要地将大型或敏感文件和目录发送到守护程序,并可能使用 ADD 或 COPY 将它们添加到图像中。
在您的情况下,您只需要echo .env >> .dockerignore
在与 Dockerfile 相同的目录中。
Mat*_*hew -2
为什么不简单地添加以下内容?:
RUN rm /usr/src/app/.env
COPY dockerenv /usr/src/app/.env
Run Code Online (Sandbox Code Playgroud)
(此外,如果您担心 .env 数据泄漏,请注意旧的 .env 文件可能在文件系统层中可见。您可以压缩文件系统以消除此问题)。
归档时间: |
|
查看次数: |
10274 次 |
最近记录: |