yml network example compose commands docker docker-compose volumes

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



docker-compose network host (3)

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

No puedo entender cómo crear un contenedor de datos (no se está ejecutando ningún proceso) con Docker Componer.


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

  • puede crear un contenedor de datos con el mismo nombre que el especificado en docker-compose.yml , y ejecutar docker-compose up --no-recreate (el que se especifica en docker-compose.yml no se volverá a crear).
  • o ejecuta un contenedor con un comando simple que nunca regresa.
    Me gusta: tail -f /dev/null

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

El DOC debe ejecutarse solo una vez para crear el volumen. Otros contenedores pueden hacer referencia a los volúmenes que contiene, incluso si se detiene.

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


Exactamente cómo hacerlo depende un poco de la imagen que está utilizando para su contenedor de solo datos. Si su imagen tiene un punto de entrypoint , debe sobrescribir esto en su docker-compose.yml . Por ejemplo, esta es una solución para la imagen oficial de MySql desde 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 hagas una docker-compose up esto, obtendrás un contenedor como ..._DatabaseData_1 que muestra un estado de Exited cuando llamas a docker ps -a . Se investigará más a fondo con la docker inspect , que tiene una marca de tiempo de 0 . Eso significa que el contenedor nunca se ejecutó. Como dice el propietario de Docker, redacte here .

Ahora, siempre que no haga un docker-compose rm -v , su contenedor de solo datos ( ..._DatabaseData_1 ) no perderá sus datos. Entonces puede hacer docker-compose stop y docker-compose up veces como quiera.

En caso de que quiera utilizar una imagen exclusiva dedicada a datos como tianon/true esto funciona igual. Aquí no es necesario sobrescribir el punto de entrypoint , porque no existe. Parece que hay algunos problemas con esa imagen y que Docker compone. No lo he probado, pero vale la pena leer este artículo en caso de que experimente algún problema.

En general, parece una buena idea usar la misma imagen para su contenedor de solo datos que está utilizando para el contenedor que accede a él. Consulte Locura de contenedor de solo datos para obtener más detalles.