社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

将Django docker容器链接到postgres容器

Manuel Santi • 4 年前 • 555 次点击  

我创建了一个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
 
555 次点击  
文章 [ 2 ]  |  最新文章 4 年前
Nader Alexan
Reply   •   1 楼
Nader Alexan    4 年前

只使用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    4 年前

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

一。用户定义的网络

所有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