【发布时间】:2017-11-21 22:51:43
【问题描述】:
我正在开发一个 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.yml 对应于你的配置 'HOST': 'postgres'?
-
我不确定我是否理解您的意思?
-
我的意思是,查看您的 docker-compose.yml 似乎不可能使用“postgres”作为主机名而不是“db”。如果它确实有效,我们缺少一些重要的配置来理解孔图。
-
唯一丢失的文件是 Dockerfile。这是 docker 网站上提供的标准版本。我猜它不相关
-
这个:
'HOST': 'postgres'永远不会解析到任何使用提供的 docker-compose.yml 的 IP。这将:'HOST': 'db'
标签: django postgresql docker docker-compose