为什么创建 postgres docker 实例的两种不同方法不同

问题描述 投票:0回答:1

为什么以下两种情况不等价? 方法一: 我有 docker-compose.xml

services:
  postgres:
    image: postgres:15
    restart: always
    volumes:
      - db_data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: password
    ports:
      - "5432:5432"

方法2: 在 docker-compose.xml 中

services:
  postgres:
    build:
      context: .
      dockerfile: Dockerfile
    restart: always
    volumes:
      - db_data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: password
    ports:
      - "5432:5432"

在 Dockerfile 中

FROM postgres:15

第一个有效。但在第二种方法中,我遇到了错误

2024-02-24 20:50:07 2024-02-25 04:50:07.584 UTC [1] LOG:  invalid value for parameter "lc_messages": "en_US.utf8"
2024-02-24 20:50:07 2024-02-25 04:50:07.584 UTC [1] LOG:  invalid value for parameter "lc_monetary": "en_US.utf8"
2024-02-24 20:50:07 2024-02-25 04:50:07.584 UTC [1] LOG:  invalid value for parameter "lc_numeric": "en_US.utf8"
2024-02-24 20:50:07 2024-02-25 04:50:07.584 UTC [1] LOG:  invalid value for parameter "lc_time": "en_US.utf8"
2024-02-24 20:50:07 2024-02-25 04:50:07.584 UTC [1] FATAL:  configuration file "/var/lib/postgresql/data/postgresql.conf" contains errors
2024-02-24 20:47:25 
2024-02-24 20:47:25 PostgreSQL Database directory appears to contain a database; Skipping initialization

因为我在该位置没有看到任何目录

/var/lib/postgresql/data

你能告诉我发生了什么事吗?我对基础图像的理解是否错误?

postgresql docker docker-compose dockerfile
1个回答
0
投票

我尝试重新创建错误并得到不同的日志输出

Attaching to db-1
db-1  |
db-1  | PostgreSQL Database directory appears to contain a database; Skipping initialization
db-1  |
db-1  | 2024-02-25 05:20:50.394 UTC [1] FATAL:  database files are incompatible with server
db-1  | 2024-02-25 05:20:50.394 UTC [1] DETAIL:  The data directory was initialized by PostgreSQL version 16, which is not compatible with this version 15.6 (Debian 15.6-1.pgdg120+2).
db-1 exited with code 0

这个 Dockerfile 设置对我有用

docker-compose.build.yml

version: '3.1'

services:
  db:
    build:
      context: .
      dockerfile: Dockerfile
    restart: always
    environment:
      POSTGRES_DB: yourdbname
      POSTGRES_USER: youruser
      POSTGRES_PASSWORD: yourpassword
    ports:
      - "5432:5432"
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

Dockerfile

FROM postgres:16

docker-compose -f docker-compose.build.yml up --build --remove-orphans

尝试使用图像运行
postgres:15
时出现同样的错误,但
16
再次解决了该错误

docker-compose.image.yml

version: '3.1'

services:
  db:
    image: postgres:16
    restart: always
    environment:
      POSTGRES_DB: yourdbname
      POSTGRES_USER: youruser
      POSTGRES_PASSWORD: yourpassword
    ports:
      - "5432:5432"
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

docker-compose -f docker-compose.image.yml up --build --remove-orphans

结论

缺乏兼容性表明 docker-compose 版本过时,或者 postgres 镜像 15 和 16 之间发生了一些变化

© www.soinside.com 2019 - 2024. All rights reserved.