Ja, Sie können es tun.
Verwenden Sie exec
und env
Befehl, um diese Szene zu implementieren.
Testvorrichtung in Docker
docker run -it --rm alpine:3.10
Befehl im Container ausführen:
exec env spring.application_name=happy-variable-name ${SHELL:-/bin/sh}
Umgebungsvariablen überprüfen:
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=/
Verwenden Sie ps aux
diese Option, um zu überprüfen, ob die PID nicht geändert wurde
PID USER TIME COMMAND
1 root 0:00 /bin/sh
12 root 0:00 ps aux
Verwenden Sie python
diese Option, um die Umgebungsvariable zu überprüfen
apk add python
python -c 'import os; print(os.environ["spring.application_name"])'
AUSGABE ist happy-variable-name
.
Was ist los?
- Shell-Aufruf eingebaut exec
- Shell-Exec-Aufruf syscall.exec create process 'env', um die aktuelle Shell zu ersetzen
- env-Prozessaufruf syscall.execvp create process '/ bin / sh', um den env-Prozess zu ersetzen
Ein anderer Weg
Wenn Sie Docker verwenden, können Sie in Dockerfile eine Variable festlegen
FROM busybox
ENV xx.f%^&*()$#ff=1234
Wenn Sie Kubernetes verwenden, können Sie die Variable über ConfigMap festlegen
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
Pod bereitstellen kubectl apply -f test.yaml
kubectl logs foobar
Ausgabe überprüfen :
xx.ff-bar=1234
ConfigMap erlaubt '-', '_' oder '.'
-D
Befehlszeilenoption deklariert wurde) genauso zufrieden ist , sodass es jetzt funktioniert. Offensichtlich sieht das Programm in beiden Variablensätzen aus, ohne es mir zu sagen. Trotzdem bin ich gespannt, welche Umgebungsvariablennamen zulässig sind.