Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

444
Visualizações
Configuración de docker env var desde el secreto de compilación

¿Hay alguna forma de establecer variables de entorno a partir de las nuevas mejoras de compilación de la ventana acoplable?

He intentado

 RUN --mount=type=secret,id=secret export SECRET=`/run/secrets/secret RUN --mount=type=secret,id=secret ENV SECRET=`/run/secrets/secret

Ambos no funcionan. ¿O es malo establecer secretos en las variables de entorno en dockerfile? Desde que se ejecutó el docker history a la variable env configurada en texto sin formato. Si ese es el caso, ¿cuál es la mejor manera de configurar el env var lo más seguro posible?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Para establecer una variable desde un secreto, puede usar la sintaxis $(cat /filename) en shell. Esto afecta el shell dentro de ese único paso, por lo que todos los usos de esa variable deben estar dentro del mismo paso. No puede extraer una variable de un paso RUN a un paso ENV. Si necesita que persista en otros pasos EJECUTAR, deberá escribir la variable en el sistema de archivos e incluirla en la imagen, lo cual no es deseable (en su lugar, simplemente monte el secreto por segunda vez en el paso EJECUTAR posterior).

Aquí hay un ejemplo de trabajo, también puede exportar ese secreto con export secret_var :

 $ cat df.secret FROM busybox RUN --mount=type=secret,id=secret \ secret_var="$(cat /run/secrets/secret)" \ && echo ${secret_var} $ cat secret.txt my_secret $ docker build --progress=plain --secret id=secret,src=$(pwd)/secret.txt -f df.secret . #1 [internal] load build definition from df.secret #1 sha256:85a18e77d3e60159b744d6ee3d96908a6fed0bd4f6a46d038e2aa0201a1028de #1 DONE 0.0s #1 [internal] load build definition from df.secret #1 sha256:85a18e77d3e60159b744d6ee3d96908a6fed0bd4f6a46d038e2aa0201a1028de #1 transferring dockerfile: 152B done #1 DONE 0.0s #2 [internal] load .dockerignore #2 sha256:a5a676bca3eaa2c757a3ae40d8d5d5e91b980822056c5b3b6c5b3169fc65f0f1 #2 transferring context: 49B done #2 DONE 0.0s #3 [internal] load metadata for docker.io/library/busybox:latest #3 sha256:da853382a7535e068feae4d80bdd0ad2567df3d5cd484fd68f919294d091b053 #3 DONE 0.0s #5 [1/2] FROM docker.io/library/busybox #5 sha256:08a03f3ffe5fba421a6403c31e153425ced631d108868f30e04985f99d69326e #5 DONE 0.0s #4 [2/2] RUN --mount=type=secret,id=secret secret=$(cat /run/secrets/secret) && echo ${secret} #4 sha256:6ef91a8a7daf012253f58dba292a0bd86af1d1a33a90838b6a99aba5abd4cfaf #4 0.587 my_secret #4 DONE 0.7s #6 exporting to image #6 sha256:e8c613e07b0b7ff33893b694f7759a10d42e180f2b4dc349fb57dc6b71dcab00 #6 exporting layers 0.0s done #6 writing image sha256:a52db3458ad88481406cd60627e2ed6f55b6720c1614f65fa8f453247a9aa4de done #6 DONE 0.0s

Tenga en cuenta la línea #4 0.587 my_secret que muestra que se emitió el secreto.

over 4 years ago · Santiago Trujillo Relatório

0

En sus ejemplos, las variables de entorno se establecen a partir de secretos, pero solo para ese proceso.

Si desea que las variables de entorno de tiempo de ejecución se establezcan a partir de secretos, deberá montar un volumen que contenga los secretos o pasar los secretos a través de docker-compose, en cualquier caso, luego utilice un script de punto de entrada para establecer los secretos en función de lugares secretos.

Nota: los archivos secretos deberán estar disponibles para cualquier persona o servicio que ejecute el archivo dockerfile.

Agregue un script de punto de entrada a su Dockerfile

archivo acoplable:

 FROM alpine # Bash is needed for the script to set env_vars based on secrets RUN apk upgrade --update-cache --available && \ apk add bash \ && rm -rf /var/cache/apk/* # Adding entrypoint script to image COPY ./docker_entrypoint /usr/local/bin/docker_entrypoint RUN chmod +x /usr/local/bin/docker_entrypoint ENTRYPOINT [ "docker_entrypoint"] CMD ["printenv"]

Este script buscará variables de entorno con el formato ENVAR_FILE para encontrar la ruta donde se almacena el secreto: exporte el secreto a una variable de entorno sin _FILE y luego llame al comando restante.

docker_punto de entrada:

 #!/usr/bin/env bash set -e file_env() { local var="$1" local fileVar="${var}_FILE" local def="${2:-}" if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then echo >&2 "error: both $var and $fileVar are set (but are exclusive)" exit 1 fi local val="$def" if [ "${!var:-}" ]; then val="${!var}" elif [ "${!fileVar:-}" ]; then val="$(< "${!fileVar}")" fi export "$var"="$val" unset "$fileVar" } # Explicitly list the environment variables you want to # set from secrets file_env "ENVAR1" file_env "ENVAR2" exec "$@"

Ahora puede pasar variables de entorno con el formato ENVAR_FILE=/mnt/path/to/secret - y el script de punto de entrada anterior leerá el contenido de ese archivo y generará las variables ENVAR=whateverYourSecretIs

Un ejemplo usando docker-compose:

 services: someService: image: <imageFromDockerFileAbove> environment: - ENVAR1_FILE=/run/secrets/envar1 - ENVAR2_FILE=/run/secrets/envar2 secrets: - envar1 - envar2 secrets: envar1: file: /pth/to/secret envar2: file: /pth/to/secret

Rendimiento esperado:

 someService_1 | HOSTNAME=<containerID> someService_1 | ENVAR1=mysecret1 someService_1 | ENVAR2=mysecret2 someService_1 | PWD=/ someService_1 | HOME=/root someService_1 | SHLVL=0 someService_1 | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Y

docker inspect --format='{{json .Config.Env}}' <containerID>

devoluciones:

["ENVAR1_FILE=/run/secrets/envar1","ENVAR2_FILE=/run/secrets/envar2","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"]

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda