python - 为什么带有 Docker 的 Django 服务器在 postgresql 中运行时没有数据库?

标签 python django postgresql python-3.x docker

我想知道为什么我的服务器正在运行,为什么它看不到另一个数据库。即 psql\l:

                                    List of databases
    Name     |    Owner    | Encoding |   Collate   |    Ctype    |   Access privileges   
-------------+-------------+----------+-------------+-------------+-----------------------
 aso         | postgres    | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0   | postgres    | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
             |             |          |             |             | postgres=CTc/postgres
 template1   | postgres    | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
             |             |          |             |             | postgres=CTc/postgres
 owner       | owner       | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
(4 rows)

我的 Django 设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

如您所见,没有名为 postgres 的数据库,但服务器运行正常(保存数据等)。另一方面,当我使用时:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'aso',
        'USER': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

我得到 django.db.utils.OperationalError: FATAL: database "aso"does not exist 谁能给我解释一下?

已编辑 @Adaikalaraj 建议在 docker 中创建数据库。我正在尝试这种方式:

init.sql:

CREATE USER postgres;
CREATE DATABASE aso;
GRANT ALL PRIVILEGES ON DATABASE aso TO postgres;

我更新的 Dockerfile:

FROM python:3.6.1
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip3 install -r requirements.txt
ADD . /code/
FROM library/postgres
ADD init.sql /docker-entrypoint-initdb.d/

不幸的是我得到:

db_1   | LOG:  database system was shut down at 2017-07-05 14:02:41 UTC
web_1  | /usr/local/bin/docker-entrypoint.sh: line 145: exec: python3: not found
db_1   | LOG:  MultiXact member wraparound protections are now enabled
db_1   | LOG:  autovacuum launcher started
db_1   | LOG:  database system is ready to accept connections
dockerpri_web_1 exited with code 127

最佳答案

此处 'HOST': 'db' 正在 docker 中运行,似乎您正在检查系统中的 psql。您可以在 HOST : 127.0.0.1 中提供您的 IP 地址(例如:127.0.0.1),或者您可以在 docker 中运行的 postgres 中创建数据库 aso

关于python - 为什么带有 Docker 的 Django 服务器在 postgresql 中运行时没有数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44922523/

相关文章:

sql - 没有时区的时间戳的 Hibernate DST 日期映射问题

postgresql - 为什么我的 Clojure 应用程序需要_分钟_才能连接到 Postgres?

python - 使 "states"in transitions fsm package more "stateful"

javascript - 在 Django 中使用模板特定的 JavaScript

django - 如何在 Django 查询集中获取表的计算元素?

python - 在 django 生成的页面中包含 Handlebars 模板

c++ - 如何保护系统和数据库之间的密码

python - 字典键上的正则表达式匹配

python - Windows上python应用程序的配置文件存放在哪里

python - 带有小数位数的地板和天花板