Docker 如何在 spec.container.env.value 上使用布尔值
Docker how to use boolean value on spec.container.env.value
有没有办法为 spec.container.env.value 传递一个布尔值?
我想用 helm 覆盖 docker 父图像 (https://github.com/APSL/docker-thumbor) 中的布尔环境变量:UPLOAD_ENABLED
我做了一个简单的测试
如果您尝试以下 yaml:
apiVersion: v1
kind: Pod
metadata:
name: envar-demo
labels:
purpose: demonstrate-envars
spec:
containers:
- name: envar-demo-container
image: gcr.io/google-samples/node-hello:1.0
env:
- name: DEMO_GREETING
value: true
并尝试使用 kubernetes 创建它,您收到以下错误:
kubectl create -f envars.yaml
错误:
error: error validating "envars.yaml": error validating data: expected type string, for field spec.containers[0].env[0].value, got bool; if you choose to ignore these errors, turn validation off with --validate=false
with validate=false
Error from server (BadRequest): error when creating "envars.yaml": Pod in version "v1" cannot be handled as a Pod: [pos 192]: json: expect char '"' but got char 't'
它也不适用于整数值
spec.container.env.value
定义为 string
。看这里:
https://kubernetes.io/docs/api-reference/v1.6/#envvar-v1-core
使用此值时,您必须cast/convert/coerse在您的容器中进行布尔运算
尝试转义该值。以下对我有用:
- name: DEMO_GREETING
value: "'true'"
这对我有用。
在我的示例中,一个是硬编码的,另一个来自环境变量。
env:
- name: MY_BOOLEAN
value: 'true'
- name: MY_BOOLEAN2
value: '${MY_BOOLEAN2_ENV_VAR}'
所以基本上,我将所有内容都用单引号括起来,以防万一。
警告:不要在您的环境变量名称中使用连字符,那将不起作用...
您也可以在命令行中使用
--set-string
而不是
--set
并且你将能够在不转义的情况下传递价值
例如:
--set-string "env.my-setting=False"
如果您是 helm chart 实现者,请引用它
data:
# VNC_ONLY: {{ .Values.vncOnly }} <-- Wrong
VNC_ONLY: "{{ .Values.vncOnly }}" # <-- Correct
有没有办法为 spec.container.env.value 传递一个布尔值? 我想用 helm 覆盖 docker 父图像 (https://github.com/APSL/docker-thumbor) 中的布尔环境变量:UPLOAD_ENABLED
我做了一个简单的测试
如果您尝试以下 yaml:
apiVersion: v1
kind: Pod
metadata:
name: envar-demo
labels:
purpose: demonstrate-envars
spec:
containers:
- name: envar-demo-container
image: gcr.io/google-samples/node-hello:1.0
env:
- name: DEMO_GREETING
value: true
并尝试使用 kubernetes 创建它,您收到以下错误:
kubectl create -f envars.yaml
错误:
error: error validating "envars.yaml": error validating data: expected type string, for field spec.containers[0].env[0].value, got bool; if you choose to ignore these errors, turn validation off with --validate=false
with validate=false
Error from server (BadRequest): error when creating "envars.yaml": Pod in version "v1" cannot be handled as a Pod: [pos 192]: json: expect char '"' but got char 't'
它也不适用于整数值
spec.container.env.value
定义为 string
。看这里:
https://kubernetes.io/docs/api-reference/v1.6/#envvar-v1-core
使用此值时,您必须cast/convert/coerse在您的容器中进行布尔运算
尝试转义该值。以下对我有用:
- name: DEMO_GREETING
value: "'true'"
这对我有用。
在我的示例中,一个是硬编码的,另一个来自环境变量。
env:
- name: MY_BOOLEAN
value: 'true'
- name: MY_BOOLEAN2
value: '${MY_BOOLEAN2_ENV_VAR}'
所以基本上,我将所有内容都用单引号括起来,以防万一。
警告:不要在您的环境变量名称中使用连字符,那将不起作用...
您也可以在命令行中使用
--set-string
而不是
--set
并且你将能够在不转义的情况下传递价值 例如:
--set-string "env.my-setting=False"
如果您是 helm chart 实现者,请引用它
data:
# VNC_ONLY: {{ .Values.vncOnly }} <-- Wrong
VNC_ONLY: "{{ .Values.vncOnly }}" # <-- Correct