ТАК, ВИ МОЖЕТЕ ВІН ЗРОБИТИ.
Використовуйте exec
та env
командуйте для реалізації цієї сцени.
Тестовий кріплення в Докер
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
.
Що сталося?
- Shell call вбудований exec
- Shell вбудований exec викликає syscall.exec створити процес 'env' для заміни поточної оболонки
- env процес виклику syscall.execvp створити процес '/ bin / sh', щоб замінити env процес
Інший спосіб
Якщо ви використовуєте docker, ви можете встановити змінну в Dockerfile
FROM busybox
ENV xx.f%^&*()$#ff=1234
Якщо ви використовуєте kubernetes, ви можете встановити змінну за допомогою ConfigMap
тест.ямл
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
опцією командного рядка), тому вона працює і зараз. Очевидно, що програма виглядає в обох змінних наборах, не повідомляючи мені. Але все ж мені цікаво, які назви змінних середовищ дозволені.