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使用的定义插件的简写,但您在构建时无法访问服务变量