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

831
Vistas
¿Cómo administra los valores secretos con docker-compose v3.1?

La versión 3.1 de la especificación docker-compose.yml introduce soporte para secretos .

Intenté esto:

 version: '3.1' services: a: image: tutum/hello-world secret: password: the_password b: image: tutum/hello-world

$ docker-compose up devuelve:

Unsupported config option for services.secret: 'password'

¿Cómo podemos usar la función de secretos en la práctica?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede leer la sección correspondiente de la documentación oficial .

Para usar secretos, debe agregar dos cosas en su archivo docker-compose.yml . Primero, un bloque secrets: de nivel superior que define todos los secretos. Luego, otro secrets: bloque debajo de cada servicio que especifica qué secretos debe recibir el servicio.

Como ejemplo, cree los dos tipos de secretos que comprenderá Docker: secretos externos y secretos de archivo .

1. Cree un secreto 'externo' usando docker secret create

Lo primero: para usar secretos con Docker, el nodo en el que se encuentra debe ser parte de un enjambre.

 $ docker swarm init

A continuación, cree un secreto 'externo':

 $ echo "This is an external secret" | docker secret create my_external_secret -

(Asegúrese de incluir el guión final, - . Es fácil pasarlo por alto).

2. Escribe otro secreto en un archivo

 $ echo "This is a file secret." > my_file_secret.txt

3. Cree un archivo docker-compose.yml que use ambos secretos

Ahora que se crearon ambos tipos de secretos, aquí está el archivo docker-compose.yml que leerá ambos y los escribirá en el servicio web :

 version: '3.1' services: web: image: nginxdemos/hello secrets: # secrets block only for 'web' service - my_external_secret - my_file_secret secrets: # top level secrets block my_external_secret: external: true my_file_secret: file: my_file_secret.txt

Docker puede leer secretos desde su propia base de datos (por ejemplo, secretos creados con docker secret create ) o desde un archivo. Lo anterior muestra ambos ejemplos.

4. Implemente su pila de prueba

Implemente la pila usando:

 $ docker stack deploy --compose-file=docker-compose.yml secret_test

Esto creará una instancia del servicio web , llamada secret_test_web .

5. Verifique que el contenedor creado por el servicio tenga ambos secretos

Use docker exec -ti [container] /bin/sh para verificar que los secretos existen.

(Nota: en el siguiente comando docker exec , la porción m2jgac... será diferente en su máquina. Ejecute docker ps para encontrar el nombre de su contenedor).

 $ docker exec -ti secret_test_web.1.m2jgacogzsiaqhgq1z0yrwekd /bin/sh # Now inside secret_test_web; secrets are contained in /run/secrets/ root@secret_test_web:~$ cd /run/secrets/ root@secret_test_web:/run/secrets$ ls my_external_secret my_file_secret root@secret_test_web:/run/secrets$ cat my_external_secret This is an external secret root@secret_test_web:/run/secrets$ cat my_file_secret This is a file secret.

Si todo está bien, los dos secretos que creamos en los pasos 1 y 2 deberían estar dentro del contenedor web que se creó cuando implementamos nuestra pila.

over 4 years ago · Santiago Trujillo Denunciar

0

Dado que tiene un servicio myapp y un archivo de secretos secrets.yml :

Crear un archivo de redacción:

 version: '3.1' services: myapp: build: . secrets: secrets_yaml

Aprovisione un secreto usando este comando:

 docker secret create secrets_yaml secrets.yml

Implemente su servicio usando este comando:

 docker deploy --compose-file docker-compose.yml myappstack

Ahora su aplicación puede acceder al archivo secreto en /run/secrets/secrets_yaml . Puede codificar esta ruta en su aplicación o crear un enlace simbólico.


La pregunta diferente

Esta respuesta es probablemente a la pregunta "¿cómo proporciona sus secretos a su clúster de enjambre de ventana acoplable".

La pregunta original "¿cómo se administran los valores secretos con docker compose?" implica que el archivo docker-compose contiene valores secretos. no lo hace

Hay una pregunta diferente: "¿Dónde almacena la fuente canónica del archivo secrets.yml ". Esto depende de ti. Puede almacenarlo en su cabeza, imprimirlo en una hoja de papel, usar un administrador de contraseñas, usar una aplicación/base de datos de secretos dedicada. Diablos, incluso puedes usar un repositorio git si está protegido de forma segura. Por supuesto, nunca lo almacene dentro del sistema que está asegurando con él :)

Recomendaría la bóveda . Para almacenar un secreto:

 # create a temporary secret file cat secrets.yml | vault write secret/myappsecrets -

Para recuperar un secreto y ponerlo en su docker swarm:

 vault read -field=value secret/myappsecrets | docker secret create secrets_yaml -

Por supuesto, puede usar el propio clúster de Docker como una única fuente de verdad para sus secretos, pero si su clúster de Docker se rompe, perderá sus secretos. Así que asegúrese de tener una copia de seguridad en otro lugar.


La pregunta que nadie hizo

La tercera pregunta (que nadie preguntó) es cómo proporcionar secretos a las máquinas de los desarrolladores. Puede ser necesario cuando hay un servicio externo que es imposible de simular localmente o una base de datos grande que es imposible de copiar.

Nuevamente, la ventana acoplable no tiene nada que ver con eso (todavía). No tiene listas de control de acceso que especifiquen qué desarrolladores tienen acceso a qué secretos. Tampoco tiene ningún mecanismo de autenticación.

La solución ideal parece ser esta:

  • Un desarrollador abre alguna aplicación web.
  • Se autentica mediante algún mecanismo de inicio de sesión único.
  • Copia una larga lista de comandos docker secret create y los ejecuta en la terminal.

Todavía tenemos que ver si aparece una aplicación de este tipo.

over 4 years ago · Santiago Trujillo Denunciar

0

También puede especificar secrets almacenados localmente en un archivo usando file: clave en el objeto de secrets . Entonces no tiene que docker secret create usted mismo, Compose / docker stack deploy lo hará por usted.

 version: '3.1' secrets: password: file: ./password services: password_consumer: image: alpine secrets: - password

Referencia: Componer archivo versión 3 referencia: Secretos

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