Py学习  »  Django

将Django docker容器链接到postgres容器

Manuel Santi • 6 年前 • 1005 次点击  

我创建了一个django docker应用程序映像。 在我的django应用程序中,在settings.py数据库中的条目是:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'NAME': 'cath_local',
    'USER': 'postgres',
    'PASSWORD': 'mypass',
    'HOST': 'postgres',
    'PORT': '5432',
    'OPTIONS': {
        'client_encoding': 'UTF8',
    },
}
}

在这一点上,我用 docker build 命令;全部完成。 在运行我的django应用程序docker映像之前,我运行:

docker run -it postgres

已下载图像并正确启动容器

enter image description here

但是当我运行我的django应用程序时

docker run -it cath2019/cathedral_studio:latest

连接=连接(dsn,连接工厂=连接工厂,**kwasync) django.db.utils.operational错误:无法将主机名“postgres”转换为地址:名称无法解析

这里是我的应用程序摘要文件:

FROM python:3.6-alpine
RUN apk add --no-cache make linux-headers libffi-dev jpeg-dev zlib-dev
RUN apk update && apk add postgresql-dev gcc python3-dev musl-dev
#RUN apk update && apk add build-essential libssl-dev libffi-dev
RUN mkdir /Code
WORKDIR /Code
COPY ./requirements.txt .

RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ENV PYTHONUNBUFFERED 1

COPY . /Code/

ENTRYPOINT python /Code/core/manage.py runserver 0.0.0.0:8000

如何连接到django设置数据库以运行postgres容器?

非常感谢你

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51222
文章 [ 2 ]  |  最新文章 6 年前
Nader Alexan
Reply   •   1 楼
Nader Alexan    6 年前

只使用Docker

您需要使用以下链接Django容器: --link postgres:postgres

结帐 this answer

使用Docker Compose

version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

资料来源: https://docs.docker.com/compose/django/

Shubham Patel
Reply   •   2 楼
Shubham Patel    6 年前

您可以使用两种方法来解决此问题:

一。用户定义的网络

所有Docker主机上都存在默认的网桥网络。如果你这样做了 不指定其他网络,新容器将自动 连接到默认网桥网络。

Link

您可以使用 docker network inspect bridge . 然后可以使用“来自容器的IP地址”属性。

不建议这样做,因为容器中的更改可能会更改ip 地址。

Docker不支持在 默认网桥网络。如果希望容器能够解析 按容器名称列出的IP地址,应使用用户定义的网络 相反。可以使用遗留docker run--link选项将两个容器链接在一起,但在大多数情况下不建议这样做。

创建网络运行 docker network create --driver bridge django_network .

然后使用 docker run -it postgres --network=django_network docker run -it cath2019/cathedral_studio:latest --network=django_network .

现在您可以使用主机名从django应用程序连接到postgres数据库。

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'NAME': 'cath_local',
    'USER': 'postgres',
    'PASSWORD': 'mypass',
    'HOST': 'postgres',
    'PORT': '5432',
    'OPTIONS': {
      'client_encoding': 'UTF8',
    },
}

}

2。Docker合成

看一看官方文件 Link 停靠一个django应用程序。

version: '3'
services:
  db:
    image: postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db