#django #mongodb #docker #docker-compose #djongo
#django #mongodb #docker #docker-compose #djongo
Вопрос:
Я хочу запустить приложение django, используя djongo с mongo и docker. Моя настройка выглядит так:
docker-compose.yml
version: '3.7'
services:
webserver:
build:
context: .
ports:
- "8000:8000"
volumes:
- ./webserver:/webserver
command: sh -c "python manage.py runserver 0.0.0.0:8000"
environment:
- DEBUG=1
links:
- mongo
depends_on:
- migration
mongo:
image: mongo:latest
restart: unless-stopped
volumes:
- ./mongo/data/db:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: mongoadmin
MONGO_INITDB_DATABASE: raspicam
ports:
- "27017:27017"
migration:
build: .
image: app
command: sh -c "python manage.py migrate"
volumes:
- ./webserver:/webserver
links:
- mongo
depends_on:
- make_migrations
make_migrations:
build: .
image: app
command: sh -c "python manage.py makemigrations"
volumes:
- ./webserver:/webserver
links:
- mongo
depends_on:
- mongo
Dockerfile:
FROM python:3.8-alpine
ENV PATH="/scripts:${PATH}"
ENV LIBRARY_PATH=/lib:/usr/lib
COPY ./requirements.txt /requirements.txt
RUN apk add --update --no-cache --virtual .tmp gcc libc-dev linux-headers jpeg-dev libjpeg-turbo
RUN apk add build-base python3-dev zlib-dev
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r /requirements.txt
RUN apk add libjpeg
RUN apk del .tmp
RUN mkdir /webserver
COPY ./webserver /webserver
WORKDIR /webserver
COPY ./scripts /scripts
RUN chmod x /scripts/*
RUN mkdir -p /vol/web/media
RUN mkdir -p /vol/web/
RUN adduser -D user
RUN chown -R user:user /vol
RUN chmod -R 755 /vol/web
USER user
CMD ["entrypoint.sh"]
settings.py
DATABASES = {
"default": {
"ENGINE": "djongo",
"NAME": "raspicam",
"CLIENT": {
"host": "mongodb://mongodb:27017",
"username": "root",
"password": "mongoadmin",
"authSource": "admin",
"authMechanism": "SCRAM-SHA-1",
},
}
}
Я уже тестирую на своем локальном компьютере, и это работает.
но я пытаюсь настроить его. Проблема в том, что когда я «docker-compose up», я получаю следующую ошибку.
Creating server_mongo_1 ... done
Creating server_make_migrations_1 ... done
Creating server_migration_1 ... done
Creating server_webserver_1 ... done
mongo_1 | Successfully added user: {
mongo_1 | "user" : "root",
mongo_1 | "roles" : [
mongo_1 | {
mongo_1 | "role" : "root",
mongo_1 | "db" : "admin"
mongo_1 | }
mongo_1 | ]
mongo_1 | }
mongo_1 | Error saving history file: FileOpenFailed Unable to open() file /home/mongodb/.dbshell: No such file or directory
make_migrations_1 | Traceback (most recent call last):
make_migrations_1 | File "manage.py", line 21, in <module>
make_migrations_1 | main()
make_migrations_1 | File "manage.py", line 17, in main
make_migrations_1 | execute_from_command_line(sys.argv)
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
make_migrations_1 | utility.execute()
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 375, in execute
make_migrations_1 | self.fetch_command(subcommand).run_from_argv(self.argv)
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 323, in run_from_argv
make_migrations_1 | self.execute(*args, **cmd_options)
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 364, in execute
make_migrations_1 | output = self.handle(*args, **options)
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 83, in wrapped
make_migrations_1 | res = handle_func(*args, **kwargs)
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/makemigrations.py", line 101, in handle
make_migrations_1 | loader.check_consistent_history(connection)
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/loader.py", line 283, in check_consistent_history
make_migrations_1 | applied = recorder.applied_migrations()
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 73, in applied_migrations
make_migrations_1 | if self.has_table():
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 56, in has_table
make_migrations_1 | return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/introspection.py", line 48, in table_names
make_migrations_1 | return get_names(cursor)
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/introspection.py", line 43, in get_names
make_migrations_1 | return sorted(ti.name for ti in self.get_table_list(cursor)
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/djongo/introspection.py", line 47, in get_table_list
make_migrations_1 | for c in cursor.db_conn.list_collection_names()
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/database.py", line 863, in list_collection_names
make_migrations_1 | for result in self.list_collections(session=session, **kwargs)]
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/database.py", line 825, in list_collections
make_migrations_1 | return self.__client._retryable_read(
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1460, in _retryable_read
make_migrations_1 | server = self._select_server(
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1278, in _select_server
make_migrations_1 | server = topology.select_server(server_selector)
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/topology.py", line 241, in select_server
make_migrations_1 | return random.choice(self.select_servers(selector,
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/topology.py", line 199, in select_servers
make_migrations_1 | server_descriptions = self._select_servers_loop(
make_migrations_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/topology.py", line 215, in _select_servers_loop
make_migrations_1 | raise ServerSelectionTimeoutError(
make_migrations_1 | pymongo.errors.ServerSelectionTimeoutError: mongodb:27017: [Errno -2] Name does not resolve, Timeout: 30s, Topology Description: <TopologyDescription id: 5fb23c4bc9495116fef1072a, topology_type: Single, servers: [<ServerDescription ('mongodb', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('mongodb:27017: [Errno -2] Name does not resolve')>]>
migration_1 | Traceback (most recent call last):
migration_1 | File "manage.py", line 21, in <module>
migration_1 | main()
migration_1 | File "manage.py", line 17, in main
migration_1 | execute_from_command_line(sys.argv)
migration_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
migration_1 | utility.execute()
migration_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 375, in execute
migration_1 | self.fetch_command(subcommand).run_from_argv(self.argv)
migration_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 323, in run_from_argv
migration_1 | self.execute(*args, **cmd_options)
migration_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 364, in execute
migration_1 | output = self.handle(*args, **options)
migration_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 83, in wrapped
migration_1 | res = handle_func(*args, **kwargs)
migration_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/migrate.py", line 87, in handle
migration_1 | executor = MigrationExecutor(connection, self.migration_progress_callback)
migration_1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/executor.py", line 18, in __init__
migration_1 | self.loader = MigrationLoader(self.connection)
migration_1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/loader.py", line 49, in __init__
migration_1 | self.build_graph()
migration_1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/loader.py", line 212, in build_graph
migration_1 | self.applied_migrations = recorder.applied_migrations()
migration_1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 73, in applied_migrations
migration_1 | if self.has_table():
migration_1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 56, in has_table
migration_1 | return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
migration_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/introspection.py", line 48, in table_names
migration_1 | return get_names(cursor)
migration_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/introspection.py", line 43, in get_names
migration_1 | return sorted(ti.name for ti in self.get_table_list(cursor)
migration_1 | File "/usr/local/lib/python3.8/site-packages/djongo/introspection.py", line 47, in get_table_list
migration_1 | for c in cursor.db_conn.list_collection_names()
migration_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/database.py", line 863, in list_collection_names
migration_1 | for result in self.list_collections(session=session, **kwargs)]
migration_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/database.py", line 825, in list_collections
migration_1 | return self.__client._retryable_read(
migration_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1460, in _retryable_read
migration_1 | server = self._select_server(
migration_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1278, in _select_server
migration_1 | server = topology.select_server(server_selector)
migration_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/topology.py", line 241, in select_server
migration_1 | return random.choice(self.select_servers(selector,
migration_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/topology.py", line 199, in select_servers
migration_1 | server_descriptions = self._select_servers_loop(
migration_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/topology.py", line 215, in _select_servers_loop
migration_1 | raise ServerSelectionTimeoutError(
migration_1 | pymongo.errors.ServerSelectionTimeoutError: mongodb:27017: [Errno -2] Name does not resolve, Timeout: 30s, Topology Description: <TopologyDescription id: 5fb23c4c69a8bce7b564bf46, topology_type: Single, servers: [<ServerDescription ('mongodb', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('mongodb:27017: [Errno -2] Name does not resolve')>]>
server_make_migrations_1 exited with code 1
server_migration_1 exited with code 1
webserver_1 | Exception in thread django-main-thread:
webserver_1 | Traceback (most recent call last):
webserver_1 | File "/usr/local/lib/python3.8/threading.py", line 932, in _bootstrap_inner
webserver_1 | self.run()
webserver_1 | File "/usr/local/lib/python3.8/threading.py", line 870, in run
webserver_1 | self._target(*self._args, **self._kwargs)
webserver_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/autoreload.py", line 54, in wrapper
webserver_1 | fn(*args, **kwargs)
webserver_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 120, in inner_run
webserver_1 | self.check_migrations()
webserver_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 453, in check_migrations
webserver_1 | executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
webserver_1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/executor.py", line 18, in __init__
webserver_1 | self.loader = MigrationLoader(self.connection)
webserver_1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/loader.py", line 49, in __init__
webserver_1 | self.build_graph()
webserver_1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/loader.py", line 212, in build_graph
webserver_1 | self.applied_migrations = recorder.applied_migrations()
webserver_1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 73, in applied_migrations
webserver_1 | if self.has_table():
webserver_1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 56, in has_table
webserver_1 | return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
webserver_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/introspection.py", line 48, in table_names
webserver_1 | return get_names(cursor)
webserver_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/introspection.py", line 43, in get_names
webserver_1 | return sorted(ti.name for ti in self.get_table_list(cursor)
webserver_1 | File "/usr/local/lib/python3.8/site-packages/djongo/introspection.py", line 47, in get_table_list
webserver_1 | for c in cursor.db_conn.list_collection_names()
webserver_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/database.py", line 863, in list_collection_names
webserver_1 | for result in self.list_collections(session=session, **kwargs)]
webserver_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/database.py", line 825, in list_collections
webserver_1 | return self.__client._retryable_read(
webserver_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1460, in _retryable_read
webserver_1 | server = self._select_server(
webserver_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1278, in _select_server
webserver_1 | server = topology.select_server(server_selector)
webserver_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/topology.py", line 241, in select_server
webserver_1 | return random.choice(self.select_servers(selector,
webserver_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/topology.py", line 199, in select_servers
webserver_1 | server_descriptions = self._select_servers_loop(
webserver_1 | File "/usr/local/lib/python3.8/site-packages/pymongo/topology.py", line 215, in _select_servers_loop
webserver_1 | raise ServerSelectionTimeoutError(
webserver_1 | pymongo.errors.ServerSelectionTimeoutError: mongodb:27017: [Errno -2] Name does not resolve, Timeout: 30s, Topology Description: <TopologyDescription id: 5fb23c4d6fa2c64607ec6aee, topology_type: Single, servers: [<ServerDescription ('mongodb', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('mongodb:27017: [Errno -2] Name does not resolve')>]>
Как я могу решить эту проблему….
p.s что означает эта картинка ?! работает ли mongo с docker ?! введите описание изображения здесь
Комментарии:
1. [Ошибка -2] Имя не разрешается, ваше имя контейнера — mongo, а не mongodb, как вы установили в host
2. @iklinac Я изменил его, но он не работает с этим сообщением об ошибке pymongo.errors. InvalidURI: недопустимая схема URI: URI должен начинаться с ‘mongodb://’ или ‘mongodb srv://’
3. вы изменили схему, а не часть url