Para aprovechar la respuesta de irakli, aquí hay una solución actualizada:
- usar el archivo Docker Compose de la versión 2 más reciente
- separar
volumes
sección - configuraciones adicionales eliminadas
docker-compose.yml
version: '2'
services:
postgres9:
image: postgres:9.4
expose:
- 5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
demostración
Inicie el servidor de base de datos de Postgres:
$ docker-compose up
Mostrar todas las tablas de la base de datos. En otra terminal, hable con el Postgres del contenedor:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
No mostrará nada, ya que la base de datos está en blanco. Crear una tabla:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
Enumere la tabla recién creada:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------+-------+-------------------+--------------------------
public | beer | table | |
¡Hurra! Ahora comenzamos una base de datos de Postgres usando un volumen de almacenamiento compartido y almacenamos algunos datos en él. El siguiente paso es verificar que los datos se mantengan después de que el servidor se detenga.
Ahora, elimine el contenedor del servidor de Postgres:
$ docker-compose stop
Vuelva a iniciar el contenedor de Postgres:
$ docker-compose up
Esperamos que el servidor de la base de datos reutilice el almacenamiento, por lo que nuestros datos muy importantes aún están allí. Comprobar:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------+-------+-------------------+--------------------------
public | beer | table | |
Usamos con éxito un archivo Docker Compose de nuevo estilo para ejecutar una base de datos de Postgres usando un volumen de datos externo y comprobamos que mantiene nuestros datos sanos y salvos.
almacenamiento de datos
Primero, haga una copia de seguridad, almacenando nuestros datos en el host:
$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
Elimina nuestros datos de la base de datos de invitados:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
Restaure nuestra copia de seguridad (almacenada en el host) en el contenedor de Postgres.
Nota: use "exec -i", no "-it", de lo contrario obtendrá un error "el dispositivo de entrada no es un TTY".
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
Enumere las tablas para verificar que la restauración funcionó:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------+-------+-------------------+--------------------------
public | beer | table | |
En resumen, hemos verificado que podemos iniciar una base de datos, los datos persisten después de un reinicio y podemos restaurar una copia de seguridad desde el host.
¡Gracias Tomasz!