【问题标题】:With a container running MongoDB, how can I run a setup script on start?使用运行 MongoDB 的容器,如何在启动时运行设置脚本?
【发布时间】:2021-03-02 07:46:22
【问题描述】:

我有一个运行 mongo 数据库的 docker 容器,然后是一个检查存储在其上的数据的服务,但首先必须完成一些基本设置,例如添加用户和集合。我有一个脚本可以完成所有这些工作,但现在我必须使用 docker exec -it logging-service_mongo_1 bash docker-entrypoint-initdb.d/test2.sh 手动运行它 请注意,脚本是容器的卷。建立运行 mongo 的容器后,有没有办法让脚本运行?我曾尝试使用入口点,但没有运气。抱歉,如果缺少此信息,这是我第一次尝试同时使用 docker 和 mongodb

还有一点是我继承的代码中包含了这个

CMD [ "npm", "run", "start:prod" ]

当我尝试这样做时,我认为它可能已经弄乱了入口点

【问题讨论】:

    标签: mongodb bash docker


    【解决方案1】:

    如果你只需要设置用户和密码,你可以在启动容器时设置它

    docker run -d --name container_name \
          -e MONGO_INITDB_ROOT_USERNAME=admin \
          -e MONGO_INITDB_ROOT_PASSWORD=password \
          mongo
    

    如果你使用 docker-compose

      mongodb:
        container_name: mongodb
        ports:
          - 27017:27017
        environment:
          MONGO_INITDB_ROOT_USERNAME: admin
          MONGO_INITDB_ROOT_PASSWORD: password
        volumes:
          - mongo_data:/data/db
    

    关于集合,一旦您在其上插入数据,它将被创建。

    如果您真的需要在 mongo 容器启动后执行此操作,我建议您创建另一个容器,当它检测到 mongo 已打开时尝试设置 mongo

    【讨论】:

      【解决方案2】:

      如果您使用的是官方MongoDB docker image,请查看镜像文档的“初始化新实例”部分:

      当第一次启动容器时,它将执行 /docker-entrypoint-initdb.d 中的扩展名为 .sh 和 .js 的文件。文件将按字母顺序执行。 .js 文件将由 mongo 使用 MONGO_INITDB_DATABASE 变量指定的数据库(如果存在)执行,否则进行测试。您也可以在 .js 脚本中切换数据库。

      您可以基于这个将脚本烘焙到/docker-entrypoint-initdb.d 的镜像构建一个新镜像,或者您可以使用绑定挂载 (docker run -v $PWD/myscript.sh:/docker-entrypoint-initdb.d/myscript.sh ...) 将脚本挂载到该目录中

      【讨论】:

        猜你喜欢
        • 2018-05-22
        • 1970-01-01
        • 2018-06-29
        • 1970-01-01
        • 1970-01-01
        • 2018-05-20
        • 2016-02-21
        • 2021-08-16
        • 1970-01-01
        相关资源
        最近更新 更多