我从production build创建了一个CRA,其中有一个连接字符串
当尝试通过service将其放入kubernetes时,我是以这种方式设置的:
准备好CRA的精简版prod将此翻译为
"http://"+Object({NODE_ENV:"production",PUBLIC_URL:""}).APISERVER_SERVICE_HOST+":"+Object({NODE_ENV:"production",PUBLIC_URL:""}).APISERVER_SERVICE_PORT
process.env
没有任何容器ENV。
难道是因为该构建只是在构建时“嵌入”了env变量,这就是客户端将它们视为字符串而不是位于吊舱中的键/值的原因吗?
目标是在容器部署完毕后,通过process.env.VARIABLE_NAME在容器中使用 env 变量来访问 api网址
问题是,在部署uri时未定义,这意味着代码无法将 proccess.env.VARIABLE 转换/检测/转换为其值
甚至console.log(process.env)
也会返回undefined
为什么我的构建中没有得到env变量的值?
我是否必须在特定时间进行构建?
我想念什么?
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: {}
答案 0 :(得分:0)
首先,这是针对create-react-app生产build
截至Aug 24 2018
为止,还有open issue用于此操作以及应如何进行。
无论我做什么,API URL始终都是“ 密钥字符串”,而不是 env 变量的值。
我做了什么:(只是一种解决方法,没有在运行时获取服务变量)
.env.production
文件,并添加了REACT_APP_SERVICE_HOST
和REACT_APP_SERVICE_PORT
REACT_APP_APISERVER_SERVICE_HOST=35.15.5.0
和REACT_APP_APISERVER_SERVICE_PORT=3008
其他替代方法: