【发布时间】:2019-01-27 19:23:52
【问题描述】:
我从CRA 创建了一个production build,其中有一个连接字符串
当试图通过service 将其导入 kubernetes 时,我是这样设置的:
CRA 的缩小版 prod ready 翻译成这个
"http://"+Object({NODE_ENV:"production",PUBLIC_URL:""}).APISERVER_SERVICE_HOST+":"+Object({NODE_ENV:"production",PUBLIC_URL:""}).APISERVER_SERVICE_PORT
process.env 没有任何容器 ENV。
难道是构建只是在构建时“烘焙”了环境变量,这就是客户端在 pod 中将它们视为字符串而不是键/值的原因?
目标是在部署 pod 后通过 process.env.VARIABLE_NAME 访问 api url 利用容器内的 env 变量
问题是,当它被部署时,uri 是未定义的 ,这意味着代码无法将 proccess.env.VARIABLE 转换/检测/翻译为其值
甚至console.log(process.env) 也会返回undefined
如果我进入 pod/container 并检查 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: {}
【问题讨论】:
-
发布您的 Docker 文件的实际文本,以便更好地帮助您。
-
@RobertMoskal 感谢您的评论.. 什么文字?当我运行 docker images API 和 CLIENT 都可以正常工作,即使没有修改 URL 字符串,问题是在部署到 kubernetes 时
-
除非您使用 --build-arg 进行设置,否则您不会在构建时看到该环境变量。
-
像其他人一样输入 docker 文件内容作为引用文本! kubernetes 让你设置环境变量。
-
你一直在谈论在浏览器中获取这些环境变量??!!!
标签: docker kubernetes environment-variables create-react-app production-environment