文件层次结构:
|- 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/