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

标签 postgresql docker docker-compose dockerfile

文件层次结构:

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

相关文章:

java - Spring-MVC、Hibernate、Postgres : Searching in database with multiple variables

mysql - 带有单独基于文件的日志文件和日志轮换的mysql-docker

django - Pytest 不能与 Django 和 Docker 一起使用 - AssertionError : local ('/dev/console' ) is not a file

docker - Symfony4/Docker : SQLSTATE[HY000] [2002] Connection refused

postgresql - 库未加载 :/usr/local/lib/libpq. 5.4.dylib

sql - SELECT 语句期间触及的表/列的列表

ruby - Docker中的Ruby Thin应用

nginx - 使用 jwilder nginx-proxy,如何将子目录 url 代理传递到特定容器?

sql - 如何忽略完全重复的行,但在列中有重复行就可以了?

docker - 带有.NetCore的Docker,我应将SDK或运行时镜像用于微服务吗?