我正在开发一个 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',
}
postgres 和 localhost 之间有什么区别。一种是在没有 docker 的情况下运行并出现问题,而不是在我的 mac 的开发环境中,另一种则相反。
# 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 中运行,这就是为什么您拥有 localhost
主机名。
在 Compose 中,它在 postgres 容器中运行,主机名为 postgres
,这就是您拥有 postgres
主机名的原因。
如果需要,您可以在主机文件中创建一个条目,将 postgres
重定向到 localhost
,然后您只需使用 postgres
> 无处不在。
关于django - docker 中主机的 localhost 和 postgres 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44635352/