Por que “exportar” não funciona no docker exec?

1

Eu exportei variáveis em /etc/profile.d/custom.sh e ~/.bashrc . Eles estão disponíveis no ambiente quando eu executo docker exec -i CONT_ID /bin/bash . Mas quando eu executo outro comando, eles não estão disponíveis no ambiente de comando. Está certo, então tento fazer isso:

docker exec -i "$MYCONTNAME" /bin/bash -c "source /etc/profile.d/custom.sh; echo $MYVAR"

Não funciona. Eu tento mesmo:

docker exec -i "$MYCONTNAME" /bin/bash -c "export Y=123; echo Y=$Y"
docker exec -i "$MYCONTNAME" /bin/bash -c "export Y=123 && echo Y=$Y"

mas eles não funcionam também. Eu posso adicionar -e VARi=VALi , mas eles estão localizados no arquivo de script de shell com as variáveis export ing, então é de qualquer maneira para obter uma maneira de trabalhar com /bin/bash ( source /etc/profile.d/custom.sh )?

    
por Paul-AG 06.11.2018 / 12:17

1 resposta

3

$MYVAR no comando

docker exec -i "$MYCONTNAME" /bin/bash -c "source /etc/profile.d/custom.sh; echo $MYVAR"

será expandido antes que /bin/bash -c seja executado (desde que esteja entre aspas duplas).

Em vez disso, use aspas simples:

docker exec -i "$MYCONTNAME" /bin/bash -c 'source /etc/profile.d/custom.sh; echo $MYVAR'

Alternativamente (não testado),

docker exec -i "$MYCONTNAME" /usr/bin/env BASH_ENV=/etc/profile.d/custom.sh /bin/bash -c 'echo $MYVAR'

Se BASH_ENV for definido quando um shell não interativo for iniciado (por exemplo, com bash -c ), o arquivo para o qual a variável aponta será originado antes que o shell execute seus comandos.

    
por 06.11.2018 / 12:23

Tags