【问题标题】:couldn't connect to server 127.0.0.1:27017 when trying to run mongo command using docker尝试使用 docker 运行 mongo 命令时无法连接到服务器 127.0.0.1:27017
【发布时间】:2020-09-09 22:43:34
【问题描述】:

我正在尝试使用此命令在 docker 容器上运行 mongo 脚本 docker run --rm -it --volume "$(pwd):/scripts" mongo:latest mongo /scripts/${SCRIPT_FILE_NAME},我不断收到此错误:

MongoDB shell version v4.4.0
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error connecting to 127.0.0.1:27017 :: caused by :: Connection refused :
connect@src/mongo/shell/mongo.js:362:17
@(connect):2:6
exception: connect failed
exiting with code 1

【问题讨论】:

    标签: mongodb docker shell


    【解决方案1】:

    您共享的 docker run 命令会在容器启动时立即尝试显式执行 mongo /scripts/${SCRIPT_FILE_NAME} 命令。
    在那个时间点,mongodb 守护进程还没有准备好接受连接。

    您应该利用内置的 mongo 机制发现/docker-entrypoint-initdb.d 下的脚本并在数据库运行时执行它们,而不是尝试手动初始化。

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

    查看mongo镜像官方documentation了解更多详情。

    【讨论】:

    • 我认为这是问题所在,但根据这个答案 (stackoverflow.com/a/32944935),这个命令也应该可以工作。如果它对他有用,那么我的机器上会发生其他事情。
    • @YasinMansour 命令没问题。再说一遍:你执行得太快了。当容器启动时,mongo db 需要几秒钟才能变得可用。您的 mongo /scripts/${SCRIPT_FILE_NAME} 命令在 mongo DB 尚未运行时执行。至于您分享的答案,我很确定第一个命令 (docker run -it -p 28000:27017 --name mongoContainer mongo:latest mongo) 失败并出现与您类似的错误。自己做测试。然后,进行第二次测试:启动一个不带参数的 mongo 容器,并尝试使用该示例中的第二个命令,它将起作用
    猜你喜欢
    • 2012-10-30
    • 2016-08-20
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多