对于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"]
答案 0 :(得分:0)
您的问题在这里:
set -o nounset
if [ -z "${POSTGRES_USER}" ]; then
...
fi
由于设置了nounset
选项,因此如果环境中未设置if
,则POSTGRES_USER
语句将导致错误。如果删除了set -o nounset
命令,那么如果未设置环境变量,则ENTRYPOINT
脚本会将POSTGRES_USER
设置为postgres
。
如果您希望POSTGRES_USER
由您的环境文件之一设置,则需要更新您的问题以显示这些环境文件的内容,以便我们帮助诊断问题。