그렇습니다, 당신은 그것을 할 수 있습니다.
이 장면을 구현 하려면 exec
및 env
명령을 사용하십시오 .
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
환경 변수 확인에 사용
apk add python
python -c 'import os; print(os.environ["spring.application_name"])'
출력은 happy-variable-name
입니다.
무슨 일이야?
- 쉘 호출 내장 exec
- 셸 내장 exec 호출 syscall.exec는 현재 셸을 대체하는 프로세스 'env'를 만듭니다.
- env 프로세스 호출 syscall.execvp env 프로세스를 대체하는 프로세스 '/ bin / sh'작성
또 다른 방법
docker를 사용하는 경우 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
명령 줄 옵션으로 선언)에 만족한다는 것을 알았 으므로 지금 작동합니다. 분명히 프로그램은 나에게 알리지 않고 두 변수 세트를 모두 찾습니다. 그러나 여전히 어떤 환경 변수 이름이 허용되는지 궁금합니다.