Невозможно выполнить js-файлы через оболочку mongo в сценарии sh в контейнере Docker - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь запустить образ докера 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) запускают все три контейнера, четвертый будет ожидать запуска этих трех, а затем, когдачетвертый начинает выполнять это ш.

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