如何使用create-react-app在docker-compose.yml中传递环境变量

时间:2019-01-07 18:03:33

标签: reactjs docker docker-compose environment-variables create-react-app

我有nginx和客户端映像,由docker-compose.yml文件加载。 由于某些原因,在应用程序运行时(我不确定),环境变量(REACT_APP_MAXIMUM_CAMERAS_COUNT)不可见,而且我不知道为什么。

这是我的create-react-app Dockerfile:

FROM node:alpine as builder

WORKDIR /app
COPY ./package.json ./
RUN npm i
COPY . .
RUN npm run build

FROM nginx
EXPOSE 3000
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/build /usr/share/nginx/html


这是我的docker-compose.yml文件:

version: '3'
services:
  nginx:
    image: <ip_address>:5000/orassayag/osr_streamer_nginx:v1.0
    restart: always
    ports:
      - '3050:80'
  client:
    image: <ip_address>:5000/orassayag/osr_streamer_client:v1.0
    environment:
      - REACT_APP_MAXIMUM_CAMERAS_COUNT=10


请注意,由于docker-compose从私有注册表(没有任何构建)中提取了图像,因此它无法将“ build”块与“ args”一起使用(已尝试使用args且可以使用) 。
有解决此问题的解决方法吗?

1 个答案:

答案 0 :(得分:1)

您拥有的docker-compose文件似乎做对了。尝试在正在运行的容器中放入外壳,然后键入export

docker exec -it code_client_1 sh
/usr/app # export
export HOME='/root'
export HOSTNAME='f4b3fc891ce3'
export NODE_VERSION='10.15.0'
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
export PORT='80'
export PWD='/usr/app'
export REACT_APP_MAXIMUM_CAMERAS_COUNT='10'
export SHLVL='1'
export TERM='xterm'
export YARN_VERSION='1.12.3'
/usr/app #

我可以看到环境变量起作用。您的问题可能是您的网站是在未设置环境的情况下构建的,因此它实际上不会在运行时读取您的环境变量。

github上进行了冗长的讨论,尽管它可能不是最佳选择,但每次启动服务时,我都会先“重建然后运行”。这不是最佳选择,但可以满足我的需求。