TAK, MOŻESZ TO ZROBIĆ.
Użyj exec
ienv
polecenie, aby zaimplementować tę scenę.
Testuj urządzenie w Dockerze
docker run -it --rm alpine:3.10
Uruchom polecenie w kontenerze:
exec env spring.application_name=happy-variable-name ${SHELL:-/bin/sh}
Sprawdź zmienne środowiskowe:
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=/
Służy ps aux
do sprawdzania, czy PID nie został zmieniony
PID USER TIME COMMAND
1 root 0:00 /bin/sh
12 root 0:00 ps aux
Służy python
do weryfikacji zmiennej środowiskowej
apk add python
python -c 'import os; print(os.environ["spring.application_name"])'
OUTPUT jest happy-variable-name
.
Co się stało?
- Wywołanie wbudowanej powłoki exec
- Wbudowane wywołanie exec w powłoce syscall.exec tworzy proces „env” w celu zastąpienia bieżącej powłoki
- proces env wywołaj syscall.execvp utwórz proces '/ bin / sh', aby zastąpić proces env
Inny sposób
Jeśli używasz Dockera, możesz ustawić zmienną w Dockerfile
FROM busybox
ENV xx.f%^&*()$#ff=1234
- Mapa konfiguracji Kubernetes
Jeśli używasz kubernetes, możesz ustawić zmienną za pomocą 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
Wdróż pod kubectl apply -f test.yaml
Sprawdź kubectl logs foobar
wyjście:
xx.ff-bar=1234
ConfigMap zezwala na „-”, „_” lub „.”
-D
opcji wiersza poleceń), więc teraz działa. Oczywiście program wygląda w obu zestawach zmiennych, nie mówiąc mi o tym. Ale nadal jestem ciekawy, które nazwy zmiennych środowiskowych są dozwolone.