gpt4 book ai didi

postgresql - 构建dockerfiile是可行的,但是从compose引用它并运行它失败。不确定是不是dockerfile文件路径错误?

转载 作者:行者123 更新时间:2023-12-02 19:16:41 26 4
gpt4 key购买 nike

文件层次结构:

|- docker-compose.yml
|- database/
| |- Dockerfile
| |- db_schema.sql
我有一个简单的Dockerfile可以构建并运行。
FROM postgres:10

ENV POSTGRES_USER=foo
ENV POSTGRES_PASSWORD=password
ENV POSTGRES_DB=foo

COPY ./db_schema.sql /docker-entrypoint-initdb.d/

EXPOSE 5432
在复制的同一目录中有一个db_schema.sql文件。
这按预期工作。
现在,我想用docker-compose文件对此进行扩展
version: '2.0'
services:
database:
build: ./database/.
ports:
- "5432:5432"

看起来很简单。
现在的问题是,当我说 docker-compose up时,它将返回:
database_1  | Error: Database is uninitialized and superuser password is not specified.
database_1 | You must specify POSTGRES_PASSWORD to a non-empty value for the
database_1 | superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run".
database_1 |
database_1 | You may also use "POSTGRES_HOST_AUTH_METHOD=trust" to allow all
database_1 | connections without a password. This is *not* recommended.
database_1 |
database_1 | See PostgreSQL documentation about "trust":
database_1 | https://www.postgresql.org/docs/current/auth-trust.html
backend_database_1 exited with code 1
但是它们是在dockerfile中初始化的。是否需要在docker compose中设置ENV变量而不是在dockerfile本身中设置ENV变量?
看时: https://docs.docker.com/compose/environment-variables/
有人说docker-compose优先于dockerfile,但是如果他们没有定义,他们只会使用dockerfile env变量。但是这个错误仍然存​​在,这似乎使我无法接受。

最佳答案

当我尝试重现时,没有出现错误,问题中提供了确切的文件。真正的原因是错误地构建了旧图像。
重现问题后进行编辑,但图像有问题:
要强制重建镜像,可以使用以下命令:

docker-compose up --build
还可以通过撰写文件来提供环境变量:
 environment:
- POSTGRES_USER=foo
- POSTGRES_PASSWORD=password
- POSTGRES_DB=foo
删除图像也可以解决问题。

关于postgresql - 构建dockerfiile是可行的,但是从compose引用它并运行它失败。不确定是不是dockerfile文件路径错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63194923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com