はい、できます。
コマンドを使用して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 createプロセス '/ bin / sh'を呼び出して、envプロセスを置き換えます
別の方法
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
コマンドラインオプションで宣言)と同じように満足していることがわかりました。明らかに、プログラムは私に言わずに両方の変数セットを調べます。しかし、それでも、どの環境変数名が許可されているのか知りたいです。