es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilizar secretos con Docker está bien, pero falla para Docker Compose.

Tengo un Dockerfile que utiliza secretos y puedo construir la imagen correctamente usando docker build. Sin embargo, cuando intento construir la misma imagen usando docker-compose build, obtengo el error:

ERROR: Error de análisis del Dockerfile en la línea 4: Bandera desconocida: mount

Esto ocurre en Ubuntu 20.04LTS (versión de Docker 18.09.6, build 481bc77, versión de docker-compose 1.20.0-rc2, build 8c4af54).

En RHEL 7.9 (versión de Docker 20.10.7, build f0df350, versión de docker-compose 1.29.2, build 5becea4c) ocurre un error diferente:

[2/2] RUN --mount=type=secret,id=the_secret cat /run/secrets/the_secret:  
 #8 0.466 cat: /run/secrets/the_secret: No existe el archivo o el directorio

¿Cómo puedo usar docker-compose para construir mis imágenes que involucran secretos?

Construir utilizando docker (funciona)

export COMPOSE_DOCKER_CLI_BUILD=1
export DOCKER_BUILDKIT=1

echo "Tengo un secreto" > secret.txt
docker build --secret id=the_secret,src=./secret.txt .

Construir utilizando docker-compose (falla)

export COMPOSE_DOCKER_CLI_BUILD=1
export DOCKER_BUILDKIT=1

echo "Tengo un secreto" > secret.txt
docker-compose build --no-cache test

Dockerfile

#syntax=docker/dockerfile:1.2

FROM python:3.8

RUN --mount=type=secret,id=the_secret cat /run/secrets/the_secret

docker-compose.yml

version: "3.6"

services:
    test:
        build: .
        secrets:
            - the_secret

secrets:
    the_secret:
        file: secret.txt
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para construir imágenes de Docker que involucren secretos utilizando docker-compose, la versión en el archivo docker-compose.yml debe actualizarse como mínimo a la versión 3.1, ya que los secretos se introdujeron solo en la versión 3.1. El Dockerfile también debe usar la sintaxis RUN --mount=type=secret,id=<nombre_secreto> para el montaje de secretos, ya que esta sintaxis es compatible tanto en los builds de Dockerfile como en docker-compose.

    Los archivos docker-compose.yml y Dockerfile actualizados se muestran a continuación:

    docker-compose.yml:

    version: "3.8"
    
    services:
        test:
            build:
                context: .
            secrets:
                - the_secret
    
    secrets:
        the_secret:
            file: secret.txt
    

    Dockerfile:

    FROM python:3.8
    
    RUN --mount=type=secret,id=the_secret \
        cat /run/secrets/the_secret
    

    Para construir la imagen usando docker-compose, actualizamos el comando de la siguiente manera:

    export COMPOSE_DOCKER_CLI_BUILD=1
    export DOCKER_BUILDKIT=1
    
    echo "Tengo un secreto" > secret.txt
    docker-compose build --no-cache test
    

    Esto debería construir correctamente la imagen utilizando docker-compose.

Comments are closed.