Я пытаюсь запустить образ докера mongo, который будет иметь два файла .js и файл .sh после запуска контейнера докера, и он начнет установку.Скрипт sh, который будет выполнять два .js файла.
Идея состоит в том, чтобы создать этот образ докера, который после запуска создаст набор реплик в удаленном контейнере докера, выполнит файл js, который создаст replicaSet и после этого он выполнит другой файл .js в том же контейнере удаленного докера, который создаст пользователя, создаст базу данных и создаст начальные коллекции.
Все контейнеры Docker будут запущены с docker-compose , поэтому он запустит три контейнера Mongo Docker, и четвертый будет этот пользовательский, который будет создан с Docker файл.
Когда я запускаю все контейнеры (я не поставил команду для автоматического запуска сценария, чтобы проверить), и вхожу в этот четвертый контейнер, и вручную запускаю сценарий, он сообщит, что файл .js несобытие существует, хотя файл находится в той же папке, где находится сценарий .sh (копируется с помощью функции COPY
в Dockerfile ), но проблема заключается в том, что я запускаю mongo mongodb://mongo-docker-container-name:27017 replicaSet.js
из командной строки после docker exec -it
вКонтейнер это выполняется без проблем.После этого я попытался вставить mongodb://mongo-docker-container-name:27017 --eval "rs.intiate({_id: "rs0", "members": [{"_id": 0, "host": "mongo-docker-container-name"},...]})"
в сценарий sh , он столкнулся с проблемой, но когда та же команда выполняется через bash после docker exec -it
, она работает.
В Docker составляют файлы триОбычные док-контейнеры mongo запускаются с command: --replSet rs0
Dockerfile
FROM mongo
# created workdir in order not to put files in the entrypoint since they need to be executed on the remote docker-container
WORKDIR /user/src/configs
COPY replicaSet.js
COPY init.js
COPY setup.sh
COPY ["./setup.sh"]
replicaSet.js
var conf = {object for replicaSet like on mongo docs};
rs.initiate(conf);
rs.conf();
init.js
db.createUser({object for new user})
db = db.getSiblingDB('newDB')
db.createCollection('newcollection')
setup.sh
#did not put the #!/bin/bash because the mongo images does not have bash
echo "replica set initalizing"
mongo mongodb://mongo-docker-name-from-compose:27017 replicaSet.js
echo "initialised"
Посмотрел множество мест, как это делали другие люди, но в моем случае это не правильно.
Идея состоит в том, когда docker-compose up
запускается для создания образа докера для установки (это подключение к основному контейнеру mongo и выполнение js) запускают все три контейнера, четвертый будет ожидать запуска этих трех, а затем, когдачетвертый начинает выполнять это ш.