docker重新启动postgres时丢失的数据

我正在用docker-compose.yml运行一个postgres实例 –

 postgres: restart: always image: postgres:latest volumes: - /data:/var/lib/postgresql ports: - "5432:5432" environment: - POSTGRES_USER=admin - POSTGRES_PASSWORD=123456 - POSTGRES_DB=mydb - PGDATA=/var/lib/postgresql/data 

我已经添加了几行几行。 我在文件中做了一个小改动,添加了container_name: postgres ,然后用docker-compose up -d重新启动

现在当我login到数据库,我没有看到任何表/数据。

 psql -h ###### -p 5432 -d mydb -U admin --password 

数据目录是作为卷添加的,并且是完整的。

这与初始化postgres有关吗?

更新2016/10/02

请注意, /data是安装在主机docker-machine上的外部硬盘驱动器。

更新2016/10/02

另外我注意到,当我改变重命名docker-compose.yml的位置(从/home/ubuntu/dev/docker-storage/docker-compose.yml/home/ubuntu/dev/storage/docker-compose.yml ),并做一个docker-compose up -d ,我得到一个错误说

 ERROR: for postgres Conflict. The name "/postgres" is already in use by container 6de8378a8156ec368748194f8912836a7b5e3212fbb69627093d0f6114b82f0d. You have to remove (or rename) that container to be able to reuse that name. 

问题是从哪里来的? 我可能已经删除了原来的容器。

更新2016/10/06

这似乎正在工作。 出于某种奇怪的原因,我必须挂载/var/lib/postgresql/var/lib/postgresql/data

 postgres: restart: always image: postgres:latest container_name: postgres volumes: - /data/postgresql:/var/lib/postgresql - /data/postgresql/data:/var/lib/postgresql/data ports: - "5432:5432" environment: - POSTGRES_USER=admin - POSTGRES_PASSWORD=123456 - POSTGRES_DB=mydb 

up -d不会重新启动。 我想你刚刚开始一个新的实例。 您可以使用重新启动 。

docker-compose restart ...

我注意到你的主机卷目录名是数据,但是你将它挂载到postgresql而不是postgresql / data。

我不知道这是否会导致这个问题,但清理似乎是一件好事。

关于现有的/ postgres容器的错误意味着你没有成功地closures所有的东西,然后试着用相同的名字来启动新的。

可能发生的情况是,你启动了两个postgres实例,它们都指向同一个数据目录。 这可能会导致数据损坏。

指定一个容器名是防止这种情况发生的好方法,因为如您所见,Docker不会让您以同样的名称启动第二个实例。