为什么以下两种情况不等价? 方法一: 我有 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
你能告诉我发生了什么事吗?我对基础图像的理解是否错误?
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
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 之间发生了一些变化