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

标签 postgresql docker docker-compose dockerfile postgresql-9.5

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

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

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

FATAL: database files are incompatible with server

DETAIL: The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this version 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)

这会导致任何问题吗?

最佳答案

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

  1. 使用 docker-compose 命令:

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

你可以看看docker-compose down command

  1. 使用 docker volume 命令:

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

DRIVER              VOLUME NAME
local               postgres-data

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

希望对您有所帮助!

关于postgresql - 无法从 docker-compose 启动 postgres docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58141385/

相关文章:

docker - 在 Google Cloud Platform 上启动 docker 镜像时出现用户级代理错误

docker - 网站的单个 Nginx Docker 与多个 Nginx Docker

html - 无法从 HTML 访问 docker-compose 的其他服务

postgresql - 循环每个数组的项目 Postgresql

ruby-on-rails - ruby on rails jsonb 列默认值

c# - 如何使用 postgresql 函数获取多结果集

docker - docker组成了nginx反向代理,未将容器添加到docker0网桥

python-3.x - 在ubuntu上安装没有pip的python

docker - 错误 pipeline/output.go :100 Failed to connect to backoff(async(tcp://logstash:5044)) - ELK Filebeat . NET Core 3.1 Docker

sql - AWS RDS : specifying lc_collate and lc_ctype for PostgreSQL