无法从docker-compose启动postgres docker容器

10

我正在尝试启动一个PostgreSQL docker容器,版本为10.5

但在此之前,我在同一个docker-compose.yml文件中使用了9.6版本,并且数据库中没有数据。

现在更改了postgres容器的版本后,无法运行docker-compose up。它会抛出以下错误:

FATAL: 数据库文件与服务器不兼容

详细信息:数据目录由PostgreSQL 9.6初始化,不兼容该版本10.5(Debian 10.5-2.pgdg90+1)

这是docker-compose.yml文件的样子。

version: '2'

services:

  postgres_service:
   container_name: postgresql_container
   restart: always
   image: postgres:10.5
   volumes:
     - postgres-data:/var/lib/postgresql/data
     - ./postgresql/init:/docker-entrypoint-initdb.d
   ports:
     - "5432:5432"
   environment:
     - POSTGRES_USER=admin
     - POSTGRES_PASSWORD=password
volumes:
  postgres-data:
    driver: local

请问有人能告诉我问题出在哪里吗?我犯了什么错误吗? 在安装新的Postgres版本之前,我需要删除任何卷吗?

我也在本地安装了PostgreSQL。

postgres=# select version();
                                                               version                                                               
-------------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 10.10 (Ubuntu 10.10-1.pgdg18.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0, 64-bit
(1 row)
这会引起任何问题吗?

“在升级Postgres版本之前,我需要删除任何卷吗?”:是的,您应该这样做。 - Toan Quoc Ho
我在我的电脑上没有看到任何名为postgres-data的文件夹。不确定它在哪里。它既不在项目文件夹中,也不在根目录下。 - Underoos
1
我的意思是容器之外。当您使用Docker时,您的机器是主机操作系统。容器运行并将容器内的文件夹映射到主机操作系统上的一个文件夹中。只需查看包含您的docker-compose.yml文件的文件夹,然后您将看到该文件夹在那个位置。 - Toan Quoc Ho
这就是我所说的。在该位置中没有名为postgres-data的文件夹。 - Underoos
1
抱歉,我的错误。我会在下面给你一个答案。 - Toan Quoc Ho
显示剩余3条评论
2个回答

23

由于您的compose创建的存储数据库的卷仍然保留着由PostgreSQL 9.6初始化的旧数据,所以引起了问题。该卷的名称是postgres-data,在使用docker-compose.yml上的命名卷时创建。因此,为了摆脱这个问题,您可以使用以下某些方法:

  1. 使用docker-compose命令:

运行docker-compose down -v,这将停止该compose内的所有容器并删除该compose中的所有命名卷。

您可以查看docker-compose down命令的文档

  1. 使用docker volume命令:

运行docker volume ls获取计算机上当前卷的列表,我想您也会在该列表中看到您的卷:

DRIVER              VOLUME NAME
local               postgres-data

运行docker volume rm postgres-data来删除该卷,如果您的容器仍在运行且无法删除它,则可以使用-f强制删除它。

希望能有所帮助!


1
谢谢你的提示!虽然仅使用 docker-compose down -v 对我来说并没有解决问题。我还需要重新启动 Docker Desktop 并手动删除我的 Docker ".data" 文件夹中的 "db" 文件夹。 - Paul Mark
1
是的 @PaulMark,它没有为您修复的原因是因为您正在使用主机卷,它将持久存在,直到您删除主机计算机的绑定文件夹。这就是为什么当您删除“.data”文件夹时它可以工作,Paul。希望这能为您的情况提供一些信息。 - Toan Quoc Ho

1
我的解决方法是删除项目根目录下的pgdata文件夹,然后运行docker-compose build -d。这样就可以看到结果了。
/usr/local/bin/docker-entrypoint.sh: /docker-entrypoint-initdb.d/create-multiple-postgres-databases.sh: /bin/bash: bad interpreter: Permission denied

为了解决这个问题,我运行了以下代码:
chmod +x pg-init-scripts/create-multiple-postgresql-databases.sh

请注意,.sh文件名应与您拥有的文件名匹配。最后,执行docker-compose up -d命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接