SI, PUEDES HACERLO.
Usa exec
y env
ordena para implementar esta escena.
Dispositivo de prueba en Docker
docker run -it --rm alpine:3.10
Ejecutar comando en contenedor:
exec env spring.application_name=happy-variable-name ${SHELL:-/bin/sh}
Verifique las variables de entorno:
HOSTNAME=bd0bccfdc53b
SHLVL=2
HOME=/root
spring.application_name=happy-variable-name
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
Use ps aux
para verificar que el PID no haya cambiado
PID USER TIME COMMAND
1 root 0:00 /bin/sh
12 root 0:00 ps aux
Use python
para verificar la variable de entorno
apk add python
python -c 'import os; print(os.environ["spring.application_name"])'
SALIDA es happy-variable-name
.
¿Qué ocurre?
- Ejecutiva de llamada de Shell integrada
- Ejecutar el intérprete de comandos integrado de shell syscall.exec crea el proceso 'env' para reemplazar el intérprete de comandos actual
- proceso env llame a syscall.execvp cree el proceso '/ bin / sh' para reemplazar el proceso env
De otra manera
Si está usando docker, puede establecer variables en Dockerfile
FROM busybox
ENV xx.f%^&*()$#ff=1234
Si está utilizando kubernetes, puede configurar variables mediante ConfigMap
test.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: foo-config
data:
"xx.ff-bar": "1234"
---
apiVersion: v1
kind: Pod
metadata:
name: foobar
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "/bin/sh", "-c", "env" ]
envFrom:
- configMapRef:
name: foo-config
restartPolicy: Never
Implementar pod kubectl apply -f test.yaml
Verificar kubectl logs foobar
salida:
xx.ff-bar=1234
ConfigMap permite '-', '_' o '.'
-D
opción de línea de comando), por lo que funciona ahora. Obviamente, el programa se ve en ambos conjuntos de variables sin decirme. Pero aún tengo curiosidad sobre qué nombres de variables de entorno están permitidos.