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

Posted

技术标签:

【中文标题】无法从 docker-compose 启动 postgres docker 容器【英文标题】:Unable to start postgres docker container from docker-compose 【发布时间】:2020-01-28 04:24:31 【问题描述】:

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

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

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

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

DETAIL:数据目录由 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)

这会导致任何问题吗?

【问题讨论】:

Do I need to delete any volumes before proceeding with the new postgres version?:是的,你应该这样做。 是的。我刚刚删除了/var/lib/postgresql/10/main/。但仍然遇到同样的问题。那是应该删除的卷吗?我的机器上没有看到任何/var/lib/postgresql/data 似乎您正在将卷映射到项目中的文件夹。 postgres-data 这个,删除它,因为当您重新启动容器时,该文件夹中的所有文件都将映射到您的 postgresql 容器中 我的机器中没有看到任何postgres-data 文件夹。不确定它在哪里。不在项目文件夹或root - / 对不起,我的错误。下面我给你答案 【参考方案1】:

这个问题是因为你的compose创建的存储数据库的卷仍然保留PostgreSQL 9.6发起的旧数据。该卷名是postgres-data,它是在您在docker-compose.yml 上使用命名卷时创建的。因此,为了摆脱这种情况,您可以使用以下一些方法:

    使用docker-compose 命令:

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

你可以看看docker-compose down command

    使用docker volume 命令:

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

DRIVER              VOLUME NAME
local               postgres-data

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

希望有帮助!

【讨论】:

感谢您的提示!虽然只使用docker-compose down -v 并没有为我解决这个问题。我还需要重新启动 docker 桌面并手动删除我的 docker“.data”文件夹中的“db”文件夹。 是的@PaulMark,它没有为您修复的原因是因为您正在使用主机卷,它会一直存在,直到您删除主机的绑定文件夹。这就是当您删除“.data”文件夹 Paul 时它起作用的原因。希望这可以为您的案例提供一些信息。

以上是关于无法从 docker-compose 启动 postgres docker 容器的主要内容,如果未能解决你的问题,请参考以下文章

如何在Docker环境中启动时,如何从节点服务器连接到postgres

docker-compose 无法以 npm ERR 启动! enoent ENOENT:没有这样的文件或目录,打开'/usr/src/app/package.json'

无法从应用容器访问 postgres 容器

使用`docker-compose run`时无法调试,但`docker-compose up`有效

微服务架构 - 解决Docker-Compose服务编排启动顺序问题

docker-compose:无法从我的 LEMP 堆栈访问 phpMyAdmin