ใช่คุณสามารถทำได้
ใช้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
เอาท์พุท
เกิดอะไรขึ้น?
- การเรียก Shell ในตัว exec
- Shell builtin exec เรียก syscall.exec สร้างกระบวนการ 'env' เพื่อแทนที่เชลล์ปัจจุบัน
- การเรียกกระบวนการ env syscall.execvp สร้างกระบวนการ '/ 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
ตัวเลือกบรรทัดคำสั่ง) ดังนั้นจึงสามารถใช้งานได้ในขณะนี้ เห็นได้ชัดว่าโปรแกรมดูในชุดตัวแปรทั้งสองโดยไม่บอกฉัน แต่ฉันก็ยังสงสัยว่าอนุญาตให้ใช้ชื่อตัวแปรสภาพแวดล้อมใดได้บ้าง