¿cómo puedo crear un contenedor de datos solo con docker-compose?yml?


Esta pregunta proviene de un problema en el repositorio de Docker:
https://github.com/docker/compose/issues/942

No puedo averiguar cómo crear un contenedor de datos (sin proceso en ejecución) con docker compose.

Author: VonC, 2015-10-02

3 answers

Exactamente cómo hacerlo depende un poco de la imagen que esté utilizando para su contenedor de solo datos. Si tu imagen tiene un entrypoint, necesitas sobrescribir esto en tu docker-compose.yml. Por ejemplo, esta es una solución para la imagen oficial de MySQL de docker hub:

DatabaseData:
  image: mysql:5.6.25
  entrypoint: /bin/bash

DatabaseServer:
  image: mysql:5.6.25
  volumes_from:
    - DatabaseData
  environment:
    MYSQL_ROOT_PASSWORD: blabla

Cuando haces un docker-compose up en esto, obtendrás un contenedor como ..._DatabaseData_1 que muestra un estado de Exited cuando llamas a docker ps -a. Más investigación con docker inspect mostrará, que tiene una marca de tiempo de 0. Eso significa que el contenedor era nunca corras. Como lo indica el propietario de docker compose aquí.

Ahora, mientras no hagas un docker-compose rm -v, tu contenedor de solo datos (..._DatabaseData_1) no perderá sus datos. Así que puedes hacer docker-compose stop y docker-compose up tantas veces como quieras.

En caso de que desee utilizar una imagen dedicada de solo datos como tianon/true esto funciona de la misma manera. Aquí no es necesario sobrescribir el entrypoint, porque no existe. Parece que hay algunos problemas con esa imagen y docker componer. No lo he intentado. pero este artículo podría valer la pena leerlo en caso de que experimente algún problema.

En general, parece ser una buena idea usar la misma imagen para su contenedor de solo datos que está utilizando para el contenedor que accede a él. Ver Data-only container madness para más detalles.

 25
Author: Jan Suchotzki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-02 22:42:23

Un contenedor de solo datos (DOC) es un contenedor que se crea solo para servir como proveedor de volúmenes. El contenedor en sí no tiene otra función que la de que otros contenedores puedan montar su volumen usando la directiva volumes_from.

El DOCUMENTO solo tiene que ejecutarse una vez para crear el volumen. Otros contenedores pueden hacer referencia a los volúmenes en él incluso si está detenido.

La cuestión del OP: El docker-compose.yml inicia el DOC cada vez que haces un docker-compose up. OP pide una opción para crear solo contenedor y volumen, y no ejecutarlo, usando algún tipo de opción create_only: true.

 1
Author: Robert Merkwürdigeliebe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-06 16:49:33

Como se menciona en el número de la pregunta de la OP:

  • crea un contenedor de datos con el mismo nombre que el especificado en el docker-compose.yml, y ejecutar docker-compose up --no-recreate (la especificada en docker-compose.yml no será recreado).
  • o ejecuta un contenedor con un comando simple que nunca devuelve.
    Como: tail -f /dev/null
 0
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-06 16:50:42