【问题标题】:mongo docker image not running script after createdmongo docker镜像在创建后没有运行脚本
【发布时间】:2019-06-28 01:19:11
【问题描述】:

我正在使用 docker-compose 为前端、后端和 mongo 实例创建 3 个不同的容器。其中 3 个正在运行并在它们之间连接,但是一旦 mongo 实例运行,我需要在 DB 上创建一个管理员用户。根据 mongo 图像文档,位于 docker-entrypoint-initdb.d 的每个脚本都应在创建实例后运行。正如我已经说过的,我正在使用 docker compose,所以 mongo 没有 Dockerfile,只是使用官方 mongo 映像的服务,所以我为这个文件设置了一个卷 [不知道是否因为这个脚本不是正在运行,因为是符号链接而不是复制的文件]。所以我尝试运行一个命令来运行这个脚本,但它不起作用,但是如果我对 mongodb 实例执行docker exec 并自己运行脚本,它将起作用并创建管理员用户。

那么,我怎样才能让这个脚本在实例创建后运行呢?

这是我的docker-compose.yml 文件

mongodb:
    container_name: mongodb
    image: mongo
    command: /bin/bash "cd /docker-entrypoint-initdb.d && mongo-init.sh"
    networks:
      - backend-network
    volumes:
      - './db:/data/db'
      - './mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh'
    tty: true
    restart: always

【问题讨论】:

    标签: mongodb docker


    【解决方案1】:

    您不需要修改 mongo 命令,因为它会导致 mongodb 容器出现问题。通过定义command,您将覆盖预期运行的the original CMD。只要您按照here 中的说明将其安装在/docker-entrypoint-initdb.d/ 下,该脚本就会自动执行

    请注意,脚本只会在容器启动时执行一次,为了使其再次执行,您需要删除与容器关联的 /data/db

    【讨论】:

    • 正如我已经说过的,.sh 文件位于 /docker-entrypoint-initdb.d/ 上,但除非我在容器上执行 bash 并自己运行它,否则它不会被执行。
    • 请在不添加 exec 的情况下重试,并使用容器日志更新您的问题。 并确保删除同一容器使用的所有卷
    • @Miguelopezv 请注意,这些脚本的执行仅在您第一次运行容器时发生,这就是为什么我要求您删除容器使用的任何以前的卷以使其重新启动设置
    猜你喜欢
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2021-06-09
    • 2020-10-06
    • 2018-09-28
    • 1970-01-01
    相关资源
    最近更新 更多