我一直在尝试使用持久数据存储在Docker(在Windows上)运行postgres并认为我终于有了它,但是现在当我尝试启动我的容器时,我收到以下错误:
LOG: invalid primary checkpoint record
LOG: invalid secondary checkpoint record
PANIC: could not locate a valid checkpoint record
在这里,我开始使用容器并开始运行:
docker volume create ct_data
docker run --name postgres_ct -v ct_data:/var/lib/postgresql/data -p 5432:5432 postgres
然后我使用pgAdmin连接到它,创建了一个新表,并使用restore选项导入了一个postgres转储文件。加载的数据没有问题。我使用与上面相同的卷启动了第二个容器,但是使用不同的名称和端口号来测试它并且我能够连接,所以我将其关闭。
现在,一小时后,我发现我的原始容器已自动停止,因此我尝试将其重新启动并获得上述错误。这是我第一次尝试使用Docker,所以我很可能在这里错过了一些简单的东西。
答案 0 :(得分:1)
感谢@Matt的帮助,我弄清楚发生了什么。一旦我将两个容器同时连接到它,卷(也称为postgres数据库)就会损坏。
虽然允许多个容器连接到单个数据库容器,但不能通过共享卷来实现。您需要创建一个运行postgres守护程序的新容器,然后其他容器可以通过tcp套接字连接到它。有关如何执行此操作的详细信息read the docs