我正在尝试使用我的django-rest应用程序使用docker-compose。
当我自己运行它python manage.py runserver
时效果很好。
如果我尝试使用docker-compose sudo docker-compose up
,它也会运行服务器但是当我在浏览器中打开页面时出现错误。
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused
我已经有了db,所以我只是在settings.py
MONGODB_DATABASES = {
"default": {
"name": 'api',
"host": 'localhost',
"port": 27017
},
}
这是我的Dockerfile:
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY . /code
RUN pip install -r requirements.txt
我的docker-compose.yml:
version: '3.0'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
mongo:
image: mongo
已经尝试过这个:
答案 0 :(得分:1)
默认情况下,Compose会为您的应用设置单个网络。每 服务容器加入默认网络,两者都是 该网络上的其他容器可以访问,并且可以被发现 它们的主机名与容器名相同。
根据docker-compose.yaml
文件,mongo
容器可从mongo:27017
容器web
访问,因此settings.py
应更改为:
MONGODB_DATABASES = {
"default": {
"name": 'api',
"host": 'mongo',
"port": 27017
},
}
答案 1 :(得分:0)
对我有用的是简单列出所有容器
docker ps -a
CONTAINER ID
q624462b055d
f9324d078256
r0888c63d21d
tf5a32702bee
e68d1ae9b74c
并使用其ID删除与mongodb相关的内容
docker rm q624462b055d f9324d078256
并使用
更改docker-compose文件中的主机和端口DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'mongo,',
'HOST': 'mongo',
'PORT': 27017,
}
}
答案 2 :(得分:0)
如其他答案中所述,问题与mongo
文件中的docker-compose.yml
容器名称有关,因此必须更改Django设置才能找到正确的数据库主机。
在更高版本中,Djongo更改了DATABASE
中的settings.py
选项。这将产生以下新的settings.py
部分:
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'api',
'CLIENT': {
'host': 'mongo',
'port': 27017,
}
}
}
请注意,host
和port
现在是CLIENT
的子代。
更多信息可在Djongo documentation中找到。
答案 3 :(得分:-1)
我有同样的问题。
问题是我使用了错误的端口转发,并且有一个旧的容器,该容器已停止但未被移除。
我重新启动了旧容器。现在一切正常。