Expanda a variável de ambiente dentro do contêiner na linha de comando do Docker

Michael Perrin

Suponha que eu crie um Dockerfileque apenas executa um echocomando:

FROM alpine
ENTRYPOINT [ "echo" ]

e que eu construo assim:

docker build -t my_echo .

Se eu executar docker run --rm my_echo test, a saída será testconforme o esperado.

Mas como posso executar o comando para exibir uma variável de ambiente que está dentro do contêiner?

Exemplo:

docker run --rm --env MYVAR=foo my_echo ???

Como acessar a $MYVARvariável que está no container para exibir foosubstituindo o ??? parte desse comando?


Nota: Esta é uma versão simplificada do meu caso de uso real. Meu caso de uso real é uma imagem WP-CLI Docker que construí com um Dockerfile. Possui o wp-clicomando como ENTRYPOINT.

Estou tentando executar um contêiner com base nesta imagem para atualizar um parâmetro do WordPress com uma variável de ambiente. Meu comando sem Docker é wp-cli option update siteurl "http://example.com"onde http://example.comestaria em uma variável de ambiente.

Este é o comando que estou tentando executar ( wp_cli é o nome do meu contêiner):

docker run --rm --env WEBSITE_URL="http://example.com" wp_cli option update siteurl ???
Charles Duffy

É possível que o argumento que se segue imediatamente ["bash", "-c"]seja um script de shell que procura sigilos para substituir. Por exemplo, considere o seguinte script, que chamarei de argEnvSubst:

#!/usr/bin/env bash
args=( "$@" )                           # collect all arguments into a single array
for idx in "${!args[@]}"; do            # iterate over the indices of that array...
  arg=${args[$idx]}                     # ...and collect the associated values.
  if [[ $arg =~ ^@ENV[.](.*)@$ ]]; then # if we have a value that matches a pattern...
    varname=${BASH_REMATCH[1]}          # extract the variable name from that pattern
    args[$idx]=${!varname}              # and replace the value with a lookup result
  fi
done
exec "${args[@]}"                       # run our resulting array as a command.

Portanto, argEnvSubst "echo" "@ENV.foobar@"irá substituir @ENV.foobar@pelo valor do ambiente nomeado foobarantes de ser chamado echo.


Embora eu recomende fortemente injetar isso em seu Dockerfile como um script separado e nomear esse script como seu ENTRYPOINT, é possível fazer isso in-line:

ENTRYPOINT [ "bash", "-c", "args=(\"$@\"); for idx in \"${!args[@]}\"; do arg=${args[$idx]}; if [[ $arg =~ ^@ENV[.](.*)@$ ]]; then varname=${BASH_REMATCH[1]}; args[$idx]=${!varname}; fi; done; \"${args[@]}\"", "_" ]

... de modo que você possa invocar:

docker run --rm --env WEBSITE_URL="http://example.com" \
       wp_cli option update siteurl '@ENV.WEBSITE_URL@'

Observe que o uso de bash- isso significa alpine(fornecer apenas um traço) não é suficiente.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Expanda a variável de ambiente dentro do contêiner na linha de comando do Docker

Xdebug (dentro do contêiner do Docker) ignorando a variável de ambiente XDEBUG_CONFIG

No Makefile, use a variável de ambiente definida no contêiner do Docker para executar um comando

Como você passa uma variável de ambiente para o Solr em execução no Docker quando a variável de ambiente só existe dentro do contêiner?

Configurando a variável do caminho do ambiente em bashrc não testando na linha de comando

Use a variável de ambiente para definir a versão do contêiner dentro do Dockerfile

Posso definir uma variável de ambiente na linha de comando do Bash?

As instâncias de contêiner do Azure alteram a variável de ambiente na inicialização

Terraform: passando o arquivo JSON como valor de variável de ambiente com um arquivo de unidade do systemd dentro do contêiner do docker

A variável de ambiente não funciona dentro do comando

Não é possível definir a variável de ambiente dentro do contêiner do docker ao chamar o arquivo sh do Dockerfile CMD

Passando a variável de ambiente Masked Jenkins para o contêiner do Docker

Use o nome ou id do contêiner como variável de ambiente no docker compose yml

Passe a variável de ambiente do arquivo env externo para o contêiner usando docker compose

Passe a variável de ambiente para o contêiner do Apache PHP Docker

Passe a variável de ambiente do arquivo env externo para o contêiner usando docker compose

Definir e usar a variável de ambiente no docker alpine na mesma linha do shell

Não é possível editar o arquivo de ambiente com o sudo dentro do contêiner do Docker

Não é possível definir variáveis de ambiente dentro de um contêiner do docker ao construir uma imagem usando a tarefa Gradle

Expanda a variável de ambiente do arquivo JSON

Uso de variável na linha de comando do Unix

como executar o comando docker de dentro do contêiner do docker no host do Windows

Definindo a variável de ambiente derivada do contêiner em tempo de execução dentro de um shell

Como forçar a reinicialização do pod quando houver mudança na variável de ambiente do contêiner

Variável de ambiente dentro da definição do contêiner ecs vs mesma variável de ambiente definida no Dockerfile. Qual deles será usado?

Como executar um comando em um contêiner usando kubectl exec que usa variáveis de ambiente do contêiner?

Docker: é possível obter a linha de comando completa que iniciou um contêiner docker do host? Se sim, como?

Como definir a chave privada e as variáveis de ambiente na linha de comando do PuTTY

Variável de ambiente não definida na imagem do contêiner após PUSH e PULL

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    UITextView não está exibindo texto longo

  3. 3

    Dependência circular de diálogo personalizado

  4. 4

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  5. 5

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  6. 6

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  7. 7

    Setas rotuladas horizontais apontando para uma linha vertical

  8. 8

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  9. 9

    Definir um clipe em uma trama nascida no mar

  10. 10

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  11. 11

    Como dinamizar um Dataframe do pandas em Python?

  12. 12

    regex para destacar novos caracteres de linha no início e no fim

  13. 13

    Why isn't my C# .Net Core Rest API route finding my method?

  14. 14

    Como obter a entrada de trás de diálogo em treeview pyqt5 python 3

  15. 15

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  16. 16

    How to create dynamic navigation menu select from database using Codeigniter?

  17. 17

    Como recuperar parâmetros de entrada usando C #?

  18. 18

    Changing long, lat values of Polygon coordinates in python

  19. 19

    Livros sobre criptografia do muito básico ao muito avançado

  20. 20

    Método \ "POST \" não permitido no framework Django rest com ações extras & ModelViewset

  21. 21

    Pesquisa classificada, conte números abaixo do valor desejado

quentelabel

Arquivo