#spring #mongodb #docker #docker-compose
#spring #mongodb #docker #docker-составить
Вопрос:
я пытаюсь подключиться к контейнеру mongodb, но он не работает, не распознает хост.
это мой файл docker-compose.yml с сервисом:
version: '3'
services:
mongodb:
build:
context: .
dockerfile: docker/mongodb/Dockerfile
restart: always
environment:
DATABASE: database
USERNAME: user
PASSWORD: pass
ports:
- '5100:27017'
volumes:
- ./data/db:/data/db
Это мой файл dockerfile для mongodb:
FROM mvertes/alpine-mongo:4.0.5-0
ENV MONGO_INITDB_DATABASE: ${DATABASE}
ENV MONGO_INITDB_ROOT_USERNAME: ${USERNAME}
ENV MONGO_INITDB_ROOT_PASSWORD: ${PASSWORD}
COPY ./docker/mongodb/init.js /docker-entrypoint-initdb.d
CMD ["mongod"]
EXPOSE 27017
Я пытаюсь установить соединение с spring, но не могу найти службу, это у меня есть в моих свойствах:
spring.data.mongodb.host=mongodb
spring.data.mongodb.port=5100
spring.data.mongodb.username=user
spring.data.mongodb.password=pass
spring.data.mongodb.database=database
а также я пытаюсь установить соединение с robo3T, и проблема та же:
Address: mongodb://mongodb
port:5100
Ошибка в spring говорит:
com.mongodb.MongoSocketException: mongodb: unknown name or service
и в robo3T говорят:
Cannot connect to the MongoDB at mongodb:5100.
Error:
Network is unreachable.
что я делаю не так?
РЕДАКТИРОВАТЬ: мой журнал контейнера:
2019-03-16T16:22:00.714 0000 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2019-03-16T16:22:00.750 0000 I CONTROL [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=1220eaf96d91
2019-03-16T16:22:00.750 0000 I CONTROL [initandlisten] db version v4.0.5
2019-03-16T16:22:00.750 0000 I CONTROL [initandlisten] git version: 3739429dd92b92d1b0ab120911a23d50bf03c412
2019-03-16T16:22:00.750 0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.1.1a 20 Nov 2018
2019-03-16T16:22:00.750 0000 I CONTROL [initandlisten] allocator: system
2019-03-16T16:22:00.750 0000 I CONTROL [initandlisten] modules: none
2019-03-16T16:22:00.750 0000 I CONTROL [initandlisten] build environment:
2019-03-16T16:22:00.750 0000 I CONTROL [initandlisten] distarch: x86_64
2019-03-16T16:22:00.750 0000 I CONTROL [initandlisten] target_arch: x86_64
2019-03-16T16:22:00.750 0000 I CONTROL [initandlisten] options: {}
2019-03-16T16:22:00.760 0000 I STORAGE [initandlisten]
2019-03-16T16:22:00.760 0000 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2019-03-16T16:22:00.760 0000 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2019-03-16T16:22:00.768 0000 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=1432M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
2019-03-16T16:22:01.523 0000 I STORAGE [initandlisten] WiredTiger message [1552753321:523789][1:0x7f9d46a64ca8], txn-recover: Set global recovery timestamp: 0
2019-03-16T16:22:01.562 0000 I RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)
2019-03-16T16:22:01.623 0000 I CONTROL [initandlisten]
2019-03-16T16:22:01.623 0000 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-03-16T16:22:01.623 0000 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2019-03-16T16:22:01.623 0000 I CONTROL [initandlisten]
2019-03-16T16:22:01.623 0000 I CONTROL [initandlisten] ** WARNING: This server is bound to localhost.
2019-03-16T16:22:01.623 0000 I CONTROL [initandlisten] ** Remote systems will be unable to connect to this server.
2019-03-16T16:22:01.623 0000 I CONTROL [initandlisten] ** Start the server with --bind_ip <address> to specify which IP
2019-03-16T16:22:01.623 0000 I CONTROL [initandlisten] ** addresses it should serve responses from, or with --bind_ip_all to
2019-03-16T16:22:01.623 0000 I CONTROL [initandlisten] ** bind to all interfaces. If this behavior is desired, start the
2019-03-16T16:22:01.623 0000 I CONTROL [initandlisten] ** server with --bind_ip 127.0.0.1 to disable this warning.
2019-03-16T16:22:01.623 0000 I CONTROL [initandlisten]
2019-03-16T16:22:01.638 0000 I STORAGE [initandlisten] createCollection: admin.system.version with provided UUID: 74fe0f10-e6a8-439c-9548-a2cdd18df3c7
2019-03-16T16:22:01.688 0000 I COMMAND [initandlisten] setting featureCompatibilityVersion to 4.0
2019-03-16T16:22:01.700 0000 I STORAGE [initandlisten] createCollection: local.startup_log with generated UUID: 0d6bdbd7-4b15-4ad1-8ded-fa28b89ae871
2019-03-16T16:22:01.762 0000 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
2019-03-16T16:22:01.765 0000 I NETWORK [initandlisten] waiting for connections on port 27017
2019-03-16T16:22:01.825 0000 I STORAGE [LogicalSessionCacheRefresh] createCollection: config.system.sessions with generated UUID: b5462e15-4724-4b1f-8537-57d9ebb1a2e8
2019-03-16T16:22:01.902 0000 I INDEX [LogicalSessionCacheRefresh] build index on: config.system.sessions properties: { v: 2, key: { lastUse: 1 }, name: "lsidTTLIndex", ns: "config.system.sessions", expireAfterSeconds: 1800 }
2019-03-16T16:22:01.902 0000 I INDEX [LogicalSessionCacheRefresh] building index using bulk method; build may temporarily use up to 500 megabytes of RAM
2019-03-16T16:22:01.905 0000 I INDEX [LogicalSessionCacheRefresh] build index done. scanned 0 total records. 0 secs
Комментарии:
1. каково фактическое сообщение об ошибке?, вы должны подключиться к localhost и порту 5100
2. о, извините, spring выводит «com.mongodb.MongoSocketException: mongodb: неизвестное имя или служба», а robo3T выводит «Не удается подключиться к MongoDB в mongodb: 5100. Ошибка: сеть недоступна.»
Ответ №1:
Эта часть docker-compose.yml
означает, что вы хотите предоставить контейнер, который работает на порту, 27017
общедоступному на порту 5100
, чтобы любой мог получить к нему доступ либо по localhost, либо по общедоступному ip, но слово mongodb
в качестве хоста будет распознаваться только между контейнерами внутри сети docker, поэтому, если у вас есть другой контейнер в той же сети, он может получить доступ к mongodb на mongodb
в качестве имени хоста и порта 27017
ports:
- '5100:27017'
Судя по журналам mongodb, у вас следующая проблема:
** WARNING: This server is bound to localhost. Remote systems will be unable to connect to this server. Start the server with --bind_ip <address> to specify which IP
Итак, вам нужно начать mongodb
с --bind_ip 0.0.0.0
, чтобы вы могли добраться до него извне контейнера. Измените свой CMD
на следующий:
CMD [ "mongod", "--bind_ip", "0.0.0.0" ]
Или удалите CMD
из вашего Dockerfile, и он вернется к исходному CMD
базовому изображению, которое такое же, как указано выше.
Начиная с MongoDB 3.6, mongod по умолчанию привязывается к localhost. Смотрите Привязку по умолчанию к Localhost.
Комментарии:
1. вы правы, сейчас я пытаюсь использовать spring.data.mongodb.host=localhost, но та же проблема, я хочу подключиться с localhost без контейнера, мне нужно просмотреть данные в robo3T.
2. если вы используете
localhost
и это не работает, пожалуйста, опубликуйте результаты docker logs в вашем вопросе, поскольку это может быть что-то не так с вашим контейнером3. я добавляю журнал контейнера и файл dockerfile
4. отлично, я смог подключиться к контейнеру, у меня это сработало, я отмечу ответ как правильный, большое вам спасибо, хороший человек.