gpt4 book ai didi

django - docker 中主机的 localhost 和 postgres 之间的区别

转载 作者:行者123 更新时间:2023-11-29 12:35:45 25 4
gpt4 key购买 nike

我正在开发一个 django 应用程序并尝试在 docker 中运行它。我有一个到目前为止我无法理解的问题。使用 docker-compose 运行应用程序时,当我使用这些配置时,web 应用程序似乎无法连接到数据库:

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

但是一旦我将主机更改为 postgres,它就可以工作了。像这样

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

postgreslocalhost 有什么区别。一个在我的 mac 中没有在 docker 内部而不是在开发环境中运行,另一个是相反的。

# docker-compose.yml    
version: '3'

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

最佳答案

Docker Compose 实际上添加了所有 linked 的主机名容器相互连接。

在你的机器上,postgres 数据库实际上在本地主机上运行,​​这就是为什么你有 localhost 主机名。

在 Compose 中,它在 postgres 容器中运行,主机名为 postgres,这就是为什么您拥有 postgres 主机名的原因。

如果你愿意,你可以在你的主机文件中创建一个条目来将 postgres 重定向到 localhost,然后你只需要使用 postgres 无处不在。

关于django - docker 中主机的 localhost 和 postgres 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44635352/

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