【问题标题】:Run command after container start up容器启动后运行命令
【发布时间】:2018-06-09 15:52:13
【问题描述】:

我正在尝试在 docker 容器启动后执行命令。
这是我的 Dockerfile

FROM mysite:myport/mongo:3.6
EXPOSE 27017
ADD mongo.js /data/mongodb/scripts/

这是我的 docker-compose.yml

mongo:
    image: test-mongo
    container_name: test-mongo
    hostname: mongo
    expose:
      - "27017"
    ports:
      - "27017:27017"
    command: mongo --eval load("/data/mongodb/scripts/mongo.js")   

docker-compose --no-ansi up 返回我

Creating test-mongo ...
Creating test-mongo ... done
Attaching to test-mongo
test-mongo | MongoDB shell version v3.6.5
test-mongo | connecting to: mongodb://127.0.0.1:27017
test-mongo | 2018-06-09T15:46:50.229+0000 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), rea
son: Connection refused
test-mongo | 2018-06-09T15:46:50.229+0000 E QUERY    [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
test-mongo | connect@src/mongo/shell/mongo.js:251:13
test-mongo | @(connect):1:6
test-mongo | exception: connect failed
test-mongo exited with code 1

我不明白如何在 mongodb 启动后加载我的文件

【问题讨论】:

    标签: mongodb docker docker-compose


    【解决方案1】:

    通过在docker-compose.yaml 中传递command,您将覆盖mongo 图像的正常行为——因此mongo 服务器永远不会启动。您通常处理此问题的方式是将脚本放入 second 映像中,然后启动第二个容器作为 docker-compose.yaml 的一部分,该容器与 mongo 服务器建立网络连接。比如:

    version: "3"
    
    services:
      mongo:
        image: mongo
    
      client:
        image: my-mongo-client
        restart: on-failure
        command: mongo --host mongo --eval load("/data/mongodb/scripts/mongo.js")
    

    restart 指令将导致客户端容器重新启动 自动失败,这是必要的,因为它可能会尝试 在 mongo 服务器可用于处理连接之前进行连接。

    【讨论】:

    • command: mongo --host mongo --eval "load(\"/data/mongodb/scripts/mongo.js\")" 这个变种正在工作
    【解决方案2】:

    如果您想要做的只是初始化一个新数据库,例如创建一个新架构和添加一个用户,您可以创建一个初始化脚本并将其加载到容器中。来自 Docker Hub documentation

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 2023-03-09
      • 2022-10-01
      • 2019-05-21
      • 2019-03-11
      • 2022-11-10
      相关资源
      最近更新 更多