gpt4 book ai didi

python - 将 Django 和 Postgresql 与 Docker 连接起来

转载 作者:IT老高 更新时间:2023-10-28 12:46:09 26 4
gpt4 key购买 nike

我有两个 Docker 容器。第一个是 Postgresql 容器,我使用以下命令运行它。

sudo docker run -v /home/mpmsp/project/ezdict/postgresql/data:/var/lib/postgresql/data -p 127.0.0.1:5432:5432  -name my-postgres -d postgres

它基于 official image它运行良好,我可以从主机连接到 Postgresql。

第二个容器是我的 Django 应用程序的容器。该镜像是使用以下 Dockerfile 构建的(基于 this image ):

FROM python:3-onbuild
EXPOSE 8000 5432
CMD ["/bin/bash"]

我使用以下命令运行这个容器

sudo docker run --link my-postgres:my-postgres -v /home/mpmsp/project/ezdict/ezbkend:/usr/src/app -name my-app -i -t my-app

docker ps 输出显示容器已链接

NAMES
my-app/my-postgres, my-postgres

但是,当我转到 localhost:8000 时,我看到来自 Django 的错误页面,输出如下

OperationalError at /api-auth/login/
could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 5432?
Request Method: GET
Request URL: http://127.0.0.1:8000/api-auth/login/
Django Version: 1.6.4
Exception Type: OperationalError
Exception Value:
could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 5432?
Exception Location: /usr/local/lib/python3.4/site-packages/psycopg2/__init__.py in connect, line 164
Python Executable: /usr/local/bin/python
Python Version: 3.4.1
Python Path:
['/usr/src/app',
'/usr/local/lib/python34.zip',
'/usr/local/lib/python3.4',
'/usr/local/lib/python3.4/plat-linux',
'/usr/local/lib/python3.4/lib-dynload',
'/root/.local/lib/python3.4/site-packages',
'/usr/local/lib/python3.4/site-packages']
Server time: Птн, 10 Окт 2014 12:07:07 +0400

应用程序的settings.py

  DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'postgres',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}

如何使链接工作?提前致谢

最佳答案

您的 Django 镜像的 Dockerfile 不应暴露端口 5432,因为在从该镜像创建的任何容器中都不会运行 Postgresql 服务器:

FROM python:3-onbuild
EXPOSE 8000
CMD ["/bin/bash"]

然后,当您运行 Django 容器时,将其与

链接

--link my-postgres:my-postgres

您的数据库设置不正确。

在 Django 容器中:127.0.0.1 指的是 Django 容器,它没有运行任何监听端口 5432 的服务。

所以你的 settings.py 文件应该是:

  DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'postgres',
'PASSWORD': '',
'HOST': 'my-postgres',
'PORT': '5432',
}
}

当你运行你的 Django 容器时:

sudo docker run --link my-postgres:db -v/home/mpmsp/project/ezdict/ezbkend:/usr/src/app -name my-app -i -t my-app

那么您的 settings.py 文件必须是:

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

关于python - 将 Django 和 Postgresql 与 Docker 连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26295061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com