【问题标题】:Django with Postgresql on Heroku - Could not translate host name "db" to address: Name or service not knownHeroku上带有Postgresql的Django-无法将主机名“db”转换为地址:名称或服务未知
【发布时间】:2017-12-16 21:07:54
【问题描述】:

我在 Heroku 上使用 Angular 4 前端、Django 后端和 Postgresql 数据库在 Docker 中部署了我的项目。此时我的文件如下所示。当我打开应用程序时出现错误:

2017-07-11T19:51:14.485577+00:00 app[web.1]:     self.connect()
2017-07-11T19:51:14.485577+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/django/db/utils.py", line 94, in __exit__
2017-07-11T19:51:14.485578+00:00 app[web.1]:     six.reraise(dj_exc_type, dj_exc_value, traceback)
2017-07-11T19:51:14.485578+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise
2017-07-11T19:51:14.485578+00:00 app[web.1]:     raise value.with_traceback(tb)
2017-07-11T19:51:14.485579+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
2017-07-11T19:51:14.485579+00:00 app[web.1]:     self.connect()
2017-07-11T19:51:14.485579+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/base/base.py", line 189, in connect
2017-07-11T19:51:14.485580+00:00 app[web.1]:     self.connection = self.get_new_connection(conn_params)
2017-07-11T19:51:14.485580+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 176, in get_new_connection
2017-07-11T19:51:14.485580+00:00 app[web.1]:     connection = Database.connect(**conn_params)
2017-07-11T19:51:14.485581+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect
2017-07-11T19:51:14.485581+00:00 app[web.1]:     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
2017-07-11T19:51:14.485582+00:00 app[web.1]: django.db.utils.OperationalError: could not translate host name "db" to address: Name or service not known

在本地,一切似乎都运行正常。我使用docker exec -ti name /bin/bash 然后python {path}\manage.py migrate 并添加数据库。

也许我在 Heroku 上的数据库迁移有问题?

过程文件:

web: sh -c 'cd PROJECT/backend/project && gunicorn project.wsgi --log-file -'

项目树:

DockerProject
      ├── Dockerfile
      ├── Procfile
      ├── init.sql
      ├── requirements.txt
      ├── docker-compose.yml
      └── PROJECT
            ├── frontend
                   └── all files
            └── backend
                  └── project
                        ├── prices
                        ├── manage.py
                        └── project
                              └── all backend files

前端的 Dockerfile:

# Create image based on the official Node 6 image from dockerhub
FROM node:6

# Create a directory where our app will be placed
RUN mkdir -p /usr/src/app

# Change directory so that our commands run inside this new directory
WORKDIR /usr/src/app

# Copy dependency definitions
COPY package.json /usr/src/app

# Install dependecies
RUN npm install

# Get all the code needed to run the app
COPY . /usr/src/app

# Expose the port the app runs in
EXPOSE 4200

# Serve the app
CMD ["npm", "start"]

主目录的 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/

docker-compose.yml:

version: '3'

services:
  db:
    image: postgres
    environment:
      POSTGRES_USER: aso
      POSTGRES_PASSWORD: somepass
  django:
    build: .
    command: python3 MainDirectory/backend/myProject/manage.py runserver 0.0.0.0:8001
    volumes:
      - .:/code
    ports:
      - "8001:8001"
    depends_on:
      - db
  angular:
    build: MainDirectory/frontend
    ports:
      - "4200:4200"
    depends_on:
      - django

init.sql:

CREATE USER myUser;
CREATE DATABASE myProject;
GRANT ALL PRIVILEGES ON DATABASE myProject TO myUser;

【问题讨论】:

  • 你的 settings.py 中的数据库值是什么?
  • @DanielRoseman 我已经用设置更新了我的帖子。

标签: python django python-3.x docker heroku


【解决方案1】:

你的 db 容器,运行 Postgres,只存在于本地。它没有部署到 Heroku,而且无论如何 Heroku 不支持 docker-compose,所以 Django 容器不知道“db”指的是什么。

您应该使用通过 dj-database-url 覆盖数据库设置的正常模式,以便在生产中您的应用程序使用环境变量中指定的 Postgres 插件。

【讨论】:

    猜你喜欢
    • 2020-10-03
    • 2017-05-25
    • 2021-10-16
    • 2023-03-04
    • 1970-01-01
    • 2019-07-31
    • 2016-03-07
    • 1970-01-01
    • 2021-08-25
    相关资源
    最近更新 更多