我正在运行一个postgres实例,其中包含docker-compose.yml
-
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
现在当我登录数据库时,我看不到任何表/数据。
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
时,我收到错误说< / p>
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
答案 0 :(得分:4)
您所做的是骇客! 官方的方法是有一个名为PGDATA的环境变量,与容器的卷路径相同
您要去的地方
postgres:
restart: always
image: postgres:latest
container_name: postgres
volumes:
- ${PATH_TO_STORAGE}:/var/lib/postgresql/data/:rw <--- check this out
ports:
- "5432:5432"
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
PGDATA: /var/lib/postgresql/data/ <--- Check this out
希望这会有所帮助:)
答案 1 :(得分:1)
up -d
未重启。我想你刚开始一个新的实例。您可以使用restart。
docker-compose restart ...
答案 2 :(得分:1)
我注意到你的主机卷目录名是数据,但是你把它挂载到postgresql而不是postgresql / data。
我不确定这是否会导致这个问题,但清理似乎是一件好事。
答案 3 :(得分:0)
有关现有/ postgres容器的错误意味着在尝试启动具有相同名称的新容器之前,您没有成功关闭所有内容。
可能发生的事情是你启动了两个指向同一数据目录的postgres实例。这可能会导致数据损坏。
指定容器名称是防止这种情况发生的好方法,因为如您所见,Docker不会让您启动具有相同名称的第二个实例。