SIM, VOCÊ PODE FAZER.
Use exec
eenv
comando para implementar esta cena.
Dispositivo de teste no Docker
docker run -it --rm alpine:3.10
Executar comando no contêiner:
exec env spring.application_name=happy-variable-name ${SHELL:-/bin/sh}
Verifique as variáveis de ambiente:
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=/
Use ps aux
para verificar se o PID não foi alterado
PID USER TIME COMMAND
1 root 0:00 /bin/sh
12 root 0:00 ps aux
Use python
para verificar a variável environmentemnt
apk add python
python -c 'import os; print(os.environ["spring.application_name"])'
OUTPUT é happy-variable-name
.
O que acontece?
- Execução de chamada interna do shell
- O comando exec incorporado ao shell syscall.exec cria o processo 'env' para substituir o shell atual
- processo env chame syscall.execvp create process '/ bin / sh' para substituir o processo env
Outra maneira
Se você estiver usando a janela de encaixe, poderá definir variáveis no Dockerfile
FROM busybox
ENV xx.f%^&*()$#ff=1234
Se você estiver usando o kubernetes, poderá configurar a variável pelo 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
Implantar pod kubectl apply -f test.yaml
Verifique a kubectl logs foobar
saída:
xx.ff-bar=1234
O ConfigMap permite '-', '_' ou '.'
-D
opção de linha de comando), então funciona agora. Obviamente, o programa procura nos dois conjuntos de variáveis sem me informar. Mas ainda estou curioso sobre quais nomes de variáveis de ambiente são permitidos.