【发布时间】:2016-07-18 05:57:37
【问题描述】:
我正在为一个 django 应用程序创建一个 docker-compose 配置,Dockerfile 构建成功,但是当我组合它们时,django 返回一个问题——无法连接到 postgres。
我运行docker-compose run web bash,发现redis和posgres都无法连接。
我的 docker-compose.yml 文件
web:
build: .
ports:
- "8000:8000"
environment:
- 'DATABASE_HOST=db'
- 'DATABASE_NAME=mydb'
- 'DATABASE_USER=root'
- 'DATABASE_PASSWORD=root'
links:
- db
db:
image: postgres:9.1
运行 sudo docker-compose up 时出现以下错误。
web_1 | File "/usr/local/lib/python2.7/site packages/django/db/backends/postgresql/base.py", line 175, in get_new_connection
web_1 | connection = Database.connect(**conn_params)
web_1 | File "/usr/local/lib/python2.7/site-packages/psycopg2/__init__.py", line 164, in connect
web_1 | conn = _connect(dsn, connection_factory=connection_factory, async=async)
web_1 | django.db.utils.OperationalError: could not connect to server: Connection refused
web_1 | Is the server running on host "localhost" (::1) and accepting
web_1 | TCP/IP connections on port 5432?
web_1 | could not connect to server: Connection refused
web_1 | Is the server running on host "localhost" (127.0.0.1) and accepting
web_1 | TCP/IP connections on port 5432?
【问题讨论】:
-
你的 Django 设置中有什么东西可以使用这些环境变量来定义数据库吗?
-
我的 django 设置是:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'aiotadb', 'USER': 'root', 'PASSWORD': 'root', 'HOST': 'db', 'PORT': '5432', } } -
还尝试通过更改设置文件中的
'HOST':'localhost'并更改docker-compose.yml 中的'DATABASE_HOST=localhost'。仍然面临同样的问题。 -
我不确定你为什么要在 docker-compose.yml 中设置这些值,因为你没有在任何地方使用它们;您已经对设置进行了硬编码。该错误消息清楚地表明它正在尝试访问
localhost,而不是db,因此您应该检查您是否确实拥有'HOST': 'db'。
标签: django postgresql docker-compose