代码之家  ›  专栏  ›  技术社区  ›  forJ

Create React App Build和Docker Compose不传递env变量

  •  0
  • forJ  · 技术社区  · 6 年前

    FROM node:10-alpine
    
    WORKDIR /usr/app
    
    COPY package*.json ./
    
    RUN npm install
    
    COPY . .
    
    RUN npm run build
    
    FROM nginx:1.15
    
    COPY --from=0 /usr/app/nginx/default.conf /etc/nginx/conf.d/default.conf
    COPY --from=0 /usr/app/build /usr/share/nginx/html
    
    EXPOSE 6000
    

    我的docker-compose文件如下所示

      web_front:
        build:
          context: Web Front-CRA
        ports:
          - "${WEB_FRONT_PORT}:6000"
        env_file:
          - .env
        volumes:
          - /usr/app/node_modules
          - ./Web Front-CRA:/usr/app
    

    当我试着用 docker-compose up --build 我看不懂 NODE_PATH=./src/ 环境文件(所有环境变量实际上 RUN npm run build 舞台。

    但是,如果我只是像下面这样更改dockerfile来运行dev environment,它会工作得很好-所有的env文件都会被传递

    FROM node:10-alpine
    
    # work directory
    WORKDIR /usr/app
    
    # Copy dependencies first for effective caching
    COPY package*.json ./
    
    RUN npm install
    
    COPY . .
    
    EXPOSE 6000
    
    CMD ["npm", "run", "start"]
    

    我现在使用的是Ubuntu18和DockerCompose v1.23.2和Docker18.09.0。我做错什么了?

    2 回复  |  直到 6 年前
        1
  •  1
  •   muratiakos KunalK    6 年前

    这个 .env 文件是docker compose设置环境变量默认值的一个特殊的、保留名称的文件,因此如果要使用它,则不应在编写文件中指定,或使用其他文件名(例如: myservice.env )为了你 env_file 第节。

      web_front:
        env_file:
          - webfront.env
    ...
    

    docker文件在下面模糊地提到了这一点 https://docs.docker.com/compose/env-file/ 编写文件和CLI变量 / 笔记 部分

    在.env文件中定义的环境变量在容器中不会自动可见。

    要设置适用于容器的环境变量,请遵循“组合中的环境变量”主题中的指导原则,该主题描述了如何将shell环境变量传递到容器,如何在组合文件中定义环境变量,以及在以下位置执行更多操作:

        2
  •  1
  •   Varun Pozhath    6 年前

    对于要从docker compose构建阶段传递到dockerfile的环境变量,必须使用 args:在docker compose构建步骤中 . 以下示例

    web_front:
        build:
          context: Web Front-CRA
          args:
             NODE_PATH=./src/
        ports:
          - "${WEB_FRONT_PORT}:6000"
        env_file:
          - .env
        volumes:
          - /usr/app/node_modules
          - ./Web Front-CRA:/usr/app
    

    对应的dockerfile

    FROM node:10-alpine
    ARG NODE_PATH
    WORKDIR /usr/app
    
    COPY package*.json ./
    
    RUN npm install
    
    COPY . .
    
    RUN npm run build
    
    FROM nginx:1.15
    
    COPY --from=0 /usr/app/nginx/default.conf /etc/nginx/conf.d/default.conf
    COPY --from=0 /usr/app/build /usr/share/nginx/html
    
    EXPOSE 6000
    

    在dockerfile中使用 $NODE_PATH . PS我在这里使用环境变量,而不是envfile。但我希望你能明白。干杯。