首页 > 解决方案 > Docker 从 docker-compose.yml 设置一个 ENV 变量

问题描述

我有一个简单的案例,我尝试从我的docker-compose. 它现在似乎不起作用,我不知道错误在哪里。

docker-compose.yml

version: "3"
services:
  sprintbotmanager:
    container_name: sprintbotmanager
    image: sprintbotmanager:latest
    build:
      context: .
      args:
        - REACT_APP_API_URL="aabbcc"
    volumes:
      - "/node_modules"
    ports:
      - "80:3000"
    depends_on:
      - sprintbotserver
    environment:
      - CHOKIDAR_USEPOLLING=true
    stdin_open: true

Dockerfile

FROM node:10

MAINTAINER Kuba Wasilewski <jakub.wasilewski@sprint.pl>
 
WORKDIR /usr/src/app
 
COPY package*.json ./
 
RUN npm install
 
ARG REACT_APP_API_URL

ENV REACT_APP_API_URL ${REACT_APP_API_URL}

COPY . .
 
EXPOSE 3000

CMD [ "npm", "start" ]

我似乎无法在 thedocker-compose和 my之间传递我的参数Dockerfile。任何建议将不胜感激:)

标签: reactjsdockerdocker-composeenvironment-variables

解决方案


我认为问题在于您试图传递容器运行时需要的 enivorment 变量,但是传递变量的方式(通过argsARG)它仅在构建过程中可用,如Docker Compose 文档中所述。

如果我没记错的话(我没有找到说明这一点的文档,所以我也可能错了),但我认为你ENV在 Dockerfile 中正确设置了变量,但它被 Docker Compose 环境变量覆盖。

我没有对此进行测试,但如果这是问题所在,只需将变量添加到environmentdocker-compose 中即可,如下所示:

environment:
- CHOKIDAR_USEPOLLING=true
- REACT_APP_API_URL="aabbcc"

推荐阅读