我不理解Docker的“ POSTGRES_USER:未设置参数”

时间:2019-12-02 13:14:48

标签: django postgresql docker

对于Docker初学者来说很难。

我用cookiecutter-django创建了一个项目。

此后,我想从Docker开始,但是我无法开始。

所以我运行docker run -it apasn_local_django / bin / ash

Entrypoint: line 10: POSTGRES_USER: parameter not set

已发布。

env_file:环境变量在docker-compose文件中设置。

它在Dockerfile中不可用吗?

该解决方案该怎么办?

docker-compose

version: '3'

volumes:
  local_postgres_data: {}
  local_postgres_data_backups: {}

services:
  django:
    build:
      context: .
      dockerfile: ./compose/local/django/Dockerfile
    image: apasn_local_django
    depends_on:
      - postgres
    volumes:
      - .:/app
    env_file:
      - ./.envs/.local/.django
      - ./.envs/.local/.postgres
    ports:
      - "8000:8000"
    command: /start

  postgres:
    build:
      context: .
      dockerfile: ./compose/production/postgres/Dockerfile
    image: apasn_production_postgres
    volumes:
      - local_postgres_data:/var/lib/postgresql/data
      - local_postgres_data_backups:/backups
    env_file:
      - ./.envs/.local/.postgres

入口点

#!/bin/sh

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




if [ -z "${POSTGRES_USER}" ]; then
    base_postgres_image_default_user='postgres'
    export POSTGRES_USER="${base_postgres_image_default_user}"
fi
export DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}"

Dockerfile

...
WORKDIR /app

ENTRYPOINT ["/entrypoint"]

1 个答案:

答案 0 :(得分:0)

您的问题在这里:

set -o nounset

if [ -z "${POSTGRES_USER}" ]; then
  ...
fi

由于设置了nounset选项,因此如果环境中未设置if,则POSTGRES_USER语句将导致错误。如果删除了set -o nounset命令,那么如果未设置环境变量,则ENTRYPOINT脚本会将POSTGRES_USER设置为postgres

如果您希望POSTGRES_USER由您的环境文件之一设置,则需要更新您的问题以显示这些环境文件的内容,以便我们帮助诊断问题。