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不会让您以同样的名称启动第二个实例。