Docker 在CRA prod build in集装箱化Kubernetes部署中访问nodejs process.env变量

Docker 在CRA prod build in集装箱化Kubernetes部署中访问nodejs process.env变量,docker,kubernetes,environment-variables,create-react-app,production-environment,Docker,Kubernetes,Environment Variables,Create React App,Production Environment,我已经创建了一个连接字符串,其中有一个连接字符串 当我试图通过a将其导入kubernetes时,我是这样设置的: CRA的缩小版prod ready将其转换为此 “http://”+对象({NODE_ENV:“production”,PUBLIC_URL:“})。APISERVER_SERVICE_HOST+”:“+对象({NODE_ENV:“production”,PUBLIC_URL:“})。APISERVER_SERVICE_PORT process.env没有任何容器env。 是否构

我已经创建了一个连接字符串,其中有一个连接字符串
当我试图通过a将其导入kubernetes时,我是这样设置的:

CRA的缩小版prod ready将其转换为此

“http://”+对象({NODE_ENV:“production”,PUBLIC_URL:“})。APISERVER_SERVICE_HOST+”:“+对象({NODE_ENV:“production”,PUBLIC_URL:“})。APISERVER_SERVICE_PORT

process.env
没有任何容器env。
是否构建只是在构建时“烘焙”环境变量,这就是客户机在pod中将它们视为字符串而不是键/值的原因

目标是在部署pod后,通过process.env.VARIABLE\u名称访问容器内的api url利用env变量

问题是,当它被部署时,uri是未定义的,这意味着代码无法将/detect/translateprocess.env.VARIABLE转换为它的值
甚至
console.log(process.env)
返回
undefined

如果我进入pod/容器并检查环境变量,它们工作正常

为什么我的构建中没有获取环境变量的值?
我必须在某个时间建造它吗?
我错过了什么

Dockerfile

FROM node:10 as build-deps
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
ENV PATH /usr/src/app/node_modules/.bin:$PATH
COPY package.json /usr/src/app/package.json
RUN npm install --silent
RUN npm install react-scripts -g --silent
COPY . /usr/src/app
RUN npm run build
RUN echo $APISERVER_SERVICE_HOST

FROM nginx:1.12-alpine
RUN  apk update && apk add nodejs 
RUN rm -rf /etc/nginx/conf.d
COPY conf /etc/nginx 
COPY --from=build-deps /usr/src/app/build /usr/share/nginx/html
RUN echo $APISERVER_SERVICE_HOST
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
服务和部署kubernetes

#Service for readable
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    run: readable-deployment
  name: readable
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: readable-deployment
  type: LoadBalancer
status:
  loadBalancer: {}  


---
#Deployment for Readable
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    run: readable-deployment
  name: readable-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      run: readable-deployment
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: readable-deployment
    spec:
      containers:
      - image: gcr.io/kuberneteseval/readable:latest-01
        name: readable-deployment
        ports:
        - containerPort: 80
        resources: {}
status: {}

首先,这是一个产品

截至今天2018年8月24日仍有一个解决方案,以及应该如何完成

无论我做了什么,API url始终是一个“键字符串”,而不是env变量的值

我所做的:(只是一个变通方法,在运行时不获取服务变量)

  • 我创建了
    .env.production
    文件并添加了
    REACT\u APP\u SERVICE\u HOST
    REACT\u APP\u SERVICE\u PORT

    这样做的问题是,在本地机器中的docker构建时,无法获取集群服务变量的值,因此必须手动设置这些值。这样:
    REACT\u APP\u APISERVER\u SERVICE\u HOST=35.15.5.0
    REACT\u APP\u APISERVER\u SERVICE\u PORT=3008
其他备选方案:

  • 我尝试了,显然它确实抓住了服务变量。不能让它为我工作
  • 我还尝试弹出并使用,这是CRA使用的定义插件的简写,但您在构建时无法访问服务变量

发布Docker文件的实际文本,以便有更好的机会帮助您。@RobertMoskal感谢您的评论。。什么文本?当我运行docker映像时,API和客户端都可以正常工作,即使不修改URL字符串,问题是在部署到Kubernetesy时,您在构建时不会看到该环境变量,除非您使用--build-arg进行设置。像其他人一样,以引用文本的形式输入docker文件内容!让我们来设置环境变量;我一直在谈论在浏览器中获取那些环境变量??!!!