文件层次结构:

|- 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/

10-16 21:36