Postgresql Docker compose up无法验证postgres用户

Postgresql Docker compose up无法验证postgres用户,postgresql,docker,Postgresql,Docker,运行docker compose-f production.yml up最终将返回: postgres_1 | Connection matched pg_hba.conf line 95: "host all all all md5" django_1 | PostgreSQL is unavailable (sleeping)... postgres_1 | 2018-03-21 07:48:35.575 UTC [120] FATAL: passwo

运行
docker compose-f production.yml up
最终将返回:

postgres_1      |   Connection matched pg_hba.conf line 95: "host all all all md5"
django_1        | PostgreSQL is unavailable (sleeping)...
postgres_1      | 2018-03-21 07:48:35.575 UTC [120] FATAL:  password authentication failed for user "DbUsErName"
postgres_1      | 2018-03-21 07:48:35.575 UTC [120] DETAIL:  Password does not match for user "DbUsErName".  
在我的.envs/.production/.postgres中,我的envs的布局如下:

# PostgreSQL
# ------------------------------------------------------------------------------
POSTGRES_DB=luup
POSTGRES_USER=DbUsErName
POSTGRES_PASSWORD=myVeryYLongPW
在出现上述错误之前,终端还将输出:

celeryworker_1  | /entrypoint.sh: line 13: POSTGRES_USER: parameter not set  
但是,它似乎是在compose/production/django/entrypoint.sh的文件中设置的:

set -o errexit
set -o pipefail
set -o nounset


cmd="$@"

if [ -z "${POSTGRES_USER}" ]; then
    # the official postgres image uses 'postgres' as default user if not set explictly.
    export POSTGRES_USER=postgres
fi
export DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}"
自从我开始这个项目以来,我没有接触过太多postgres配置,因为这是一个只在Heroku上运行的尝试。因此,我没有进入
psql

我需要做什么才能启动并运行它

如果需要更多信息,请告诉我

编辑--production.yml:

version: '2'

volumes:
  postgres_data: {}
  postgres_backup: {}
  caddy: {}

services:
  django: &django
    build:
      context: .
      dockerfile: ./compose/production/django/Dockerfile
    depends_on:
      - postgres
      - redis
    env_file:
      - ./.envs/.production/.django
      - ./.envs/.production/.postgres
      - ./.envs/.production/.celery
    command: /gunicorn.sh

  postgres:
    build:
      context: .
      dockerfile: ./compose/production/postgres/Dockerfile
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - postgres_backup:/backups
    env_file:
      - ./.envs/.production/.postgres

  caddy:
    build:
      context: .
      dockerfile: ./compose/production/caddy/Dockerfile
    depends_on:
      - django
    volumes:
      - caddy:/root/.caddy
    env_file:
      - ./.envs/.production/.caddy
    ports:
      - "0.0.0.0:80:80"
      - "0.0.0.0:443:443"

  redis:
    image: redis:3.0

  celeryworker:
    <<: *django
    depends_on:
     - postgres
     - redis
    env_file:
      - ./.envs/.production/.celery
    command: /start-celeryworker.sh

  celerybeat:
    <<: *django
    depends_on:
      - postgres
      - redis
    env_file:
      - ./.envs/.production/.celery
    command: /start-celerybeat.sh
版本:“2”
卷数:
postgres_数据:{}
postgres_备份:{}
球童:{}
服务:
django:&django
建造:
上下文:。
dockerfile:./compose/production/django/dockerfile
取决于:
-博士后
-雷迪斯
环境文件:
-../.envs/.production/.django
-./.envs/.production/.postgres
-./.envs/.production/.芹菜
命令:/gunicorn.sh
博士后:
建造:
上下文:。
dockerfile://撰写/制作/博士后/dockerfile
卷数:
-postgres_数据:/var/lib/postgresql/data
-postgres\u备份:/backups
环境文件:
-./.envs/.production/.postgres
球童:
建造:
上下文:。
dockerfile://撰写/制作/助手/dockerfile
取决于:
-德扬戈
卷数:
-助手:/root/.caddy
环境文件:
-./.envs/.production/.caddy
端口:
- "0.0.0.0:80:80"
- "0.0.0.0:443:443"
redis:
图片:redis:3.0
芹菜工人:

Postgres容器在第一次运行时从环境变量创建用户。因此,为了使它具有新的值(生产用户名和密码),您可能必须重新构建它

  • docker编写停止postgres
  • docker编写rm postgres
  • docker compose-f production.yml up

Postgres容器在第一次运行时从环境变量创建用户。因此,为了使它具有新的值(生产用户名和密码),您可能必须重新构建它

  • docker编写停止postgres
  • docker编写rm postgres
  • docker compose-f production.yml up

你能显示你的production.yml文件吗?@Quba现在添加了你以前是否使用不同的凭据(例如dev env)运行过你的postgres。如果是这样,postgres可能只在第一次启动时创建用户,然后不检查env变量是否已更改。如果是这样的话,你能试着重建博士后吗?@Quba事实上,我不确定我有。当我尝试运行
docker compose-f local.yml run postgres psql
时,返回的结果是:
psql:无法连接到服务器:没有这样的文件或目录是在本地运行并接受Unix域套接字连接的服务器“/var/run/postgresql/.s.PGSQL.5432”
。我的理解是,这意味着它还没有建成?我将如何在Docker中构建它?尝试:
Docker compose stop postgres
Docker compose rm postgres
Docker compose-f production.yml up
你能显示你的production.yml文件吗?@Quba现在添加了你以前是否使用不同的凭据运行过你的postgres(例如dev env)。如果是这样,postgres可能只在第一次启动时创建用户,然后不检查env变量是否已更改。如果是这样的话,你能试着重建博士后吗?@Quba事实上,我不确定我有。当我尝试运行
docker compose-f local.yml run postgres psql
时,返回的结果是:
psql:无法连接到服务器:没有这样的文件或目录是在本地运行并接受Unix域套接字连接的服务器“/var/run/postgresql/.s.PGSQL.5432”
。我的理解是,这意味着它还没有建成?我该如何在Docker中构建它呢?试试:
Docker compose stop postgres
Docker compose rm postgres
Docker compose-f production.yml up
有没有办法避免我每次“起床”都要这样做?有没有办法避免我每次“起床”都要这样做?