Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

445
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda