Сбой сценария оболочки Docker MongoDB при подключении - PullRequest
0 голосов
/ 12 октября 2019

Я хотел бы выполнить некоторые скрипты после монтирования образа MongoDB из Docker. Но я получаю сообщение:

MongoDB shell version v3.6.14
connecting to: mongodb://0.0.0.0:27017/?gssapiServiceName=mongodb
2019-10-12T16:11:56.382+0000 E QUERY    [thread1] Error: couldn't 
connect to server 0.0.0.0:27017, address resolved to 0.0.0.0 :
connect@src/mongo/shell/mongo.js:263:13
@(connect):1:6

Из следующей оболочки:

#!/bin/bash

##
# Create MongoDB admin user
##
mongo --host 0.0.0.0<<EOF
use admin;
db.createUser({user: "obfuscated", pwd: "obfuscated",roles: [{role: 
"userAdminAnyDatabase", db: "admin"}]});
EOF

##
# Create Database admin user
##
mongo --host 0.0.0.0 -u obfuscated -p obfuscated --authenticationDatabase 
admin <<EOF
use my_database;
db.createUser( { "user" : "obfuscated",  "pwd": "obfuscated","roles" : 
[{ "role": "dbOwner", "db": "easystock" },{"role" : "readWrite","db" : 
"my_database"}]});
EOF

Файл Docker выглядит следующим образом:

FROM mongo:3

##
# Runs scripts
##
##
# Copy the update bash
##
RUN mkdir -p /home/bin/repository
RUN cd /home/bin
COPY createUsers ./
COPY updateDatabase ./
RUN chmod a+x createUsers
RUN chmod a+x updateEasyStock
RUN ./createUsers
RUN apt-get update && apt-get install curl
RUN ./updateDatabase

Не сейчас, чтослучилось ...

С уважением,

Жан-Люк

1 Ответ

0 голосов
/ 12 октября 2019

Вы должны запустить скрипт в точке входа, когда процесс запущен и работает, и принять соединение, во время сборки процесс mongo не запущен, и каждая инструкция, использующая директиву RUN, запускается в своей собственной оболочке.

Итакони не будут работать, как указано в вашем Dockerfile.

RUN ./createUsers
RUN ./updateDatabase

Кроме того, измените хост на localhost контейнера, то есть --host 0.0.0.0 на -- host localhost.

Что бы я хотелпредлагаем скопировать эти сценарии в /docker-entrypoint-initdb.d, а затем оставить все на официальном образе.

COPY createUsers /docker-entrypoint-initdb.d/
COPY updateDatabase /docker-entrypoint-initdb.d/

Когда контейнер запускается впервые , он будет выполнять файлы с расширениями * 1016. * .sh и .js, которые можно найти в /docker-entrypoint-initdb.d. Файлы будут выполнены в алфавитном порядке. Файлы .js будут выполняться mongo с использованием базы данных, указанной в переменной MONGO_INITDB_DATABASE, если она есть, или проверять иначе. Вы также можете переключать базы данных в сценарии .js .

Инициализация нового экземпляра контейнера Монго

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...