我有一个使用dotenv
的节点应用程序来跟踪env变量。它使用根文件夹中的.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
如果我建立&从dockerhub拉出图像。该文件已包含我在开发中使用的.env
文件。理想情况下,我想为生产指定一个不同的.env
文件。 (也许在生产服务器中手动创建一个新的.env文件)
我尝试在dockerignore中指定.env
文件。但是行COPY . /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
所以我真的不需要在构建中指定.env文件夹。但这也不起作用。
如何阻止COPY
命令复制.env
文件?
答案 0 :(得分:1)
有一个档案!
在docker CLI将上下文发送到docker守护程序之前,它会在上下文的根目录中查找名为.dockerignore的文件。如果此文件存在,CLI将修改上下文以排除与其中的模式匹配的文件和目录。这有助于避免不必要地将大型或敏感文件和目录发送到守护程序,并可能使用ADD或COPY将它们添加到映像中。
在您的情况下,您只需要在与Dockerfile相同的目录中echo .env >> .dockerignore
。
答案 1 :(得分:0)
为什么不简单地添加以下内容?:
RUN rm /usr/src/app/.env
COPY dockerenv /usr/src/app/.env
(另外如果您担心.env数据泄漏,请注意旧的.env文件可能在文件系统层中可见。您可以压缩文件系统以摆脱这种情况。)