Qual é a maneira mais simples de obter uma variável de ambiente de um contêiner de docker que não foi declarado no Dockerfile ?
Por exemplo, uma variável de ambiente que foi definida por meio de alguma docker exec container /bin/bash
sessão?
Eu posso fazer docker exec container env | grep ENV_VAR
, mas eu preferiria algo que apenas retorna o valor.
Eu tentei usar docker exec container echo "$ENV_VAR"
, mas a substituição parece ocorrer fora do contêiner, então não recebo o env var do contêiner, mas o env var do meu próprio computador.
Obrigado.
bash
docker
environment-variables
Citronen
fonte
fonte
Respostas:
A maneira correta de executar
echo "$ENV_VAR"
dentro do contêiner para que a substituição da variável ocorra no contêiner é:fonte
docker run --rm -it CONTAINER bash -c 'echo "$MY_ENV_VAR"'
container
palavra de tal forma que as pessoas entendam que é uma variávelPara visualizar todas as variáveis env:
Para obter um:
fonte
docker exec container env
edocker exec -it container /bin/bash
e depoisenv
cuspir coisas diferentes. Por quê?docker inspect container
.docker inspect container
parece ter a mesma limitação. Se eu criar uma variável de ambiente depois de executar o contêiner, ela não aparecerá em uma chamada paradocker inspect
(na seção env).bash
comando, por exemploalpine-node
. Então, usarexec container bash -c "echo $ENV_VAR"
não está funcionando. Usandoexec container env
obras para o meu caso. Usarexec container printenv
também funciona.Você pode usar em
printenv VARIABLE
vez de/bin/bash -c 'echo $VARIABLE
. É muito mais simples e não realiza substituição:fonte
printenv
para imprimir todas as variáveis.A desvantagem de usar
docker exec
é que ele requer um contêiner em execução ; portanto,docker inspect -f
pode ser útil se você não tiver certeza de que um contêiner está em execução.Exemplo 1. Saída uma lista de variáveis de ambiente separadas por espaço no contêiner especificado:
a saída ficará assim:
Exemplo # 2. Saída cada env var na nova linha e
grep
os itens necessários, por exemplo, as configurações do contêiner do mysql podem ser recuperadas assim:irá produzir:
Exemplo # 3. Vamos modificar o exemplo acima para obter uma saída amigável do bash, que pode ser usada diretamente em seus scripts:
irá produzir:
Se você quiser aprofundar, vá para a documentação do pacote de texto / modelo do Go com todos os detalhes do formato.
fonte
docker exec
sempre disse que meu contêiner não é conhecido.Nenhuma das respostas acima mostra como extrair uma variável de um contêiner não em execução (se você usar a
echo
abordagem comrun
, não obterá nenhuma saída).Simplesmente
run
comprintenv
:(Observe que, em
docker-compose
vez dedocker
funcionar também)fonte
printenv
para imprimir todas as variáveis.Se por acaso você usa o VSCode e instalou a extensão do docker , basta right+ clickno docker que deseja verificar (dentro do docker extension ), clickno Inspecionar e procurar por env , você encontrará todos os seus valores de variáveis env
fonte
A resposta de @ aisbaa funciona se você não se importa quando a variável de ambiente foi declarada. Se você deseja a variável de ambiente, mesmo que tenha sido declarada dentro de uma
exec /bin/bash
sessão, use algo como:Não é muito bonito, mas faz o trabalho.
Para obter o valor, use:
fonte
Este comando inspeciona o ambiente dos processos da docker stack no host:
fonte
Podemos modificar
entrypoint
um contêiner não em execução com odocker run
comandoExemplo de variável de ambiente PATH de show:
using
bash
andecho
: Esta resposta afirma queecho
não produzirá nenhuma saída incorreta.usando
printenv
fonte