我是Docker的新手,我试图使用docker-compose和docker-machine将我的Django rest API放入Nginx,Gunicorn和Postgres的容器中。遵循本教程:https://realpython.com/blog/python/django-development-with-docker-compose-and-machine/
我的大多数代码与教程(https://github.com/realpython/dockerizing-django)相同。有一些小的名字变化。
这是我的docker-compose.yml
(我将gunicorn命令更改为runserver以进行调试)
web:
restart: always
build: ./web
expose:
- "8000"
links:
- postgres:postgres
- redis:redis
volumes:
- /usr/src/app
- /usr/src/app/static
env_file: .env
environment:
DEBUG: 'true'
command: /usr/local/bin/python manage.py runserver
nginx:
restart: always
build: ./nginx/
ports:
- "80:80"
volumes:
- /www/static
volumes_from:
- web
links:
- web:web
postgres:
restart: always
image: postgres:latest
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data/
redis:
restart: always
image: redis:latest
ports:
- "6379:6379"
volumes:
- redisdata:/data
这是在我的Django的settings.py中:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'postgres',
'PORT': '5432',
}
}
Nginx和postgres(以及redis)已启动并运行,但是我的django服务器无法启动,出现此错误:
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?
我已经google了很多,我已经验证了postgres正在运行,在端口5432上,我可以使用psql命令连接到它。
我迷路了。我的错是什么?
编辑:它似乎没有使用我的settings.py文件或其他东西,因为它询问服务器是否在localhost上运行,而设置应该在寻找postgres。
答案 0 :(得分:1)
检查您的manage.py, 应该有一行
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
如果没有这样的线,就把它放好
将您的DJANGO_SETTINGS_MODULE
设置为PYTHONPATH
。
UPD 我克隆了你的repo并通过更改docker-compose.yml中的命令启动了web服务
- command: /usr/local/bin/gunicorn docker_django.wsgi:application -w 2 -b :8000
+ command: python manage.py runserver 0.0.0.0:8000
我确信DJANGO_SETTINGS_MODULE
是正确的。
答案 1 :(得分:0)
遇到此问题的人请检查您的settings.py
:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'dbname',
'USER': 'user',
'PASSWORD': 'password',
'HOST': 'db'
}
}
您的 HOST:'db'
和 docker-compose
文件数据库名称应该相同。如果要从 db 重命名,请确保在 docker-compose
文件和 setting.py
中进行更改:
db:
restart: always
image: postgres:latest
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data/
答案 2 :(得分:-1)
在aws ec2实例上使用docker运行django应用程序时,我正面临着同样的问题。
我注意到此错误仅在第一次构建docker映像时发生,因此要修复,我只是运行了:
CTRL + C
,然后再次docker-compose up
,一切正常。