ДА, ТЫ МОЖЕШЬ СДЕЛАТЬ ЭТО.
Используйте exec
и env
command для реализации этой сцены.
Тестовое приспособление в Docker
docker run -it --rm alpine:3.10
Запустить команду в контейнере:
exec env spring.application_name=happy-variable-name ${SHELL:-/bin/sh}
Проверьте переменные среды:
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=/
Используйте ps aux
для проверки того, что PID не изменен
PID USER TIME COMMAND
1 root 0:00 /bin/sh
12 root 0:00 ps aux
Используйте python
для проверки переменной environemnt
apk add python
python -c 'import os; print(os.environ["spring.application_name"])'
ВЫХОД есть happy-variable-name
.
Что случилось?
- Встроенный вызов оболочки exec
- Встроенный в оболочку exec вызов syscall.exec create process 'env' для замены текущей оболочки
- вызов процесса env syscall.execvp create process '/ bin / sh' для замены процесса env
По-другому
Если вы используете докер, вы можете установить переменную в Dockerfile
FROM busybox
ENV xx.f%^&*()$#ff=1234
- Карта конфигурации Kubernetes
Если вы используете кубернеты, вы можете установить переменную с помощью 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
Развернуть модуль kubectl apply -f test.yaml
Проверить kubectl logs foobar
вывод:
xx.ff-bar=1234
ConfigMap разрешает '-', '_' или '.'
-D
командной строки), так что теперь она работает. Очевидно, программа просматривает оба набора переменных, не сообщая мне об этом. Но все же мне любопытно, какие имена переменных среды разрешены.