无法在docker容器中的sh脚本中通过mongo shell执行js文件

时间:2019-02-08 16:38:16

标签: mongodb docker docker-compose dockerfile

我正在尝试启动一个mongo docker镜像,该镜像在docker容器启动后将具有两个 .js 文件和一个 .sh 文件,它将启动setup.sh脚本,将执行两个 .js 文件。

想法是创建此docker映像,该映像将在启动后在远程docker容器执行js文件中创建副本集并创建 replicaSet ,然后将其创建 在将创建用户,创建数据库和创建初始集合的同一远程docker容器上执行另一个.js文件。

所有docker容器都将以 docker-compose 开始,因此它将启动3个mongo docker容器,第四个将是使用 Docker 文件创建的此自定义

当我启动所有容器时(我没有放置命令来自动启动脚本以进行检查)并输入第四个容器并手动运行脚本 它会指出.js文件不存在,即使该文件位于.sh脚本所在的文件夹中(已在 Dockerfile 中复制了COPY函数),但问题是 我在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 脚本中,但遇到了问题,但是 当docker exec -it之后在bash上执行相同的命令时,它将起作用。

在docker compose文件中,三个常规的mongo docker容器以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来构建用于安装程序的docker映像(此连接到主mongo容器并执行js)时,将启动所有三个容器,第四个将等待这三个容器启动,然后在第四步开始执行此sh。

0 个答案:

没有答案