Pymongo.errors.ServerSelectionTimeoutError при запуске докерного образа приложения django
Я пытаюсь запустить docker-образ моего приложения Django. Я запускаю образ mongo отдельно из другого контейнера. Нужна помощь в решении следующей ошибки:
pymongo.errors.ServerSelectionTimeoutError: xxx.xxx.xxx.xxx:27017: timed out, Timeout: 30s, Topology Description: <TopologyDescription id: 61aee0f6695286eb954e68ea, topology_type: Single, servers: [<ServerDescription ('xxx.xxx.xxx.xxx', 27017) server_type: Unknown, rtt: None, error=NetworkTimeout('xxx.xxx.xxx.xxx:27017: timed out',)>]>
Я настроил mongo db с помощью djongo,
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'database-name',
'CLIENT':{
'username': 'username',
'password': 'password',
'host': 'mongodb://xxx.xxx.xxx.xxx:27017/database-name',
'port': 27017,
'authSource': 'admin',
'authMechanism': 'SCRAM-SHA-1'
}
}
}
Я также создал пользователя в базе данных mongo с помощью следующей команды;
db = db.getSiblingDB('database-name')
db.createUser({
user: 'username',
pwd: 'password',
roles: [
{
role: 'root',
db: 'admin',
},
],
});
Использование тех же учетных данных при настройке Mongo с Django.
Это мои требования.txt
asgiref==3.4.1
dataclasses==0.8
Django==3.2.9
django-filter==21.1
djangorestframework==3.12.4
djongo==1.3.6
gunicorn==20.0.4
importlib-metadata==4.8.2
Markdown==3.3.6
pymongo==3.12.1
python-dateutil==2.8.2
pytz==2021.3
six==1.16.0
sqlparse==0.2.4
typing_extensions==4.0.0
zipp==3.6.0
Контейнеры Mongo выглядят следующим образом,
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f479308130bb mongo-express "tini -- /docker-ent…" 16 hours ago Up 16 hours (healthy) 0.0.0.0:9081->8081/tcp, :::9081->8081/tcp mongo-express
4e6e0e60a473 mongo "docker-entrypoint.s…" 16 hours ago Up 16 hours (unhealthy) 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp mongodb
Если я пытаюсь получить доступ к mongo db с удаленного сервера, используя пользователя, которого я создал
mongo xxx.xxx.xxx.xxx/database-name -u username
Это позволит мне войти в оболочку mongo.
docker-compose.yml для mongo и mongo-express выглядит следующим образом,
version: "3"
services:
mongodb:
image : mongo
container_name: mongodb
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=pass12345
volumes:
- mongodb-data:/data/db
networks:
- mongodb_network
ports:
- 27017:27017
healthcheck:
test: echo 'db.runCommand("ping").ok' | mongo xxx.xxx.x.xx:27017/test
interval: 30s
timeout: 10s
retries: 5
# start_period: 30s
restart: unless-stopped
mongo-express:
image: mongo-express
container_name: mongo-express
environment:
- ME_CONFIG_MONGODB_SERVER=mongodb
- ME_CONFIG_MONGODB_ENABLE_ADMIN=true
- ME_CONFIG_MONGODB_ADMINUSERNAME=root
- ME_CONFIG_MONGODB_ADMINPASSWORD=pass12345
- ME_CONFIG_BASICAUTH_USERNAME=admin
- ME_CONFIG_BASICAUTH_PASSWORD=admin123
volumes:
- mongodb-data
depends_on:
- mongodb
networks:
- mongodb_network
ports:
- 8081:8081
healthcheck:
test: wget --quiet --tries=3 --spider http://admin:admin123@xxx.xxx.xx.xxx:9081 || exit 1
interval: 30s
timeout: 10s
retries: 3
restart: unless-stopped
volumes:
mongodb-data:
# name: mongodb-data
networks:
mongodb_network:
driver: bridge
docker-compose.yml для приложения Django выглядит следующим образом;
version: "3"
services:
app:
build: .
volumes:
- .:/app
- static:/static/
- logs:/logs/
image: app:api
container_name: app_container
nginx:
build: ./nginx
volumes:
- .:/app
- static:/static/
ports:
- "9001:80"
depends_on:
- app
volumes:
static:
logs:
Приложение работает нормально при запуске без docker-compose, используя
python manage.py runserver