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

Suk*_*djf 6 postgresql docker dockerfile docker-compose postgresql-9.5

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

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

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

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

详细信息:数据目录由 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
Run Code Online (Sandbox Code Playgroud)

有人可以让我知道问题出在哪里。我哪里出错了?在继续使用新的 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)
Run Code Online (Sandbox Code Playgroud)

这会导致任何问题吗?

Toa*_* Ho 11

造成的问题是因为您创建的用于存储数据库的卷仍然保留由PostgreSQL 9.6. 该卷名称是postgres-data您在docker-compose.yml. 所以简单地摆脱这个,你可以使用下面的一些方法:

  1. 使用docker-compose命令:

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

你可以看看docker-compose down 命令

  1. 使用docker volume命令:

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

DRIVER              VOLUME NAME
local               postgres-data
Run Code Online (Sandbox Code Playgroud)

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

希望有帮助!