如何正确处理docker

时间:2016-08-23 14:03:07

标签: node.js docker

我有一个使用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文件?

2 个答案:

答案 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文件可能在文件系统层中可见。您可以压缩文件系统以摆脱这种情况。)