【问题标题】:Docker instance connect to local Mongo: can't bind to addressDocker 实例连接到本地 Mongo:无法绑定到地址
【发布时间】:2020-04-05 03:10:14
【问题描述】:

我有一个使用 MongoDB 的 dockerized (NodeJS) 应用程序。 在我的本地环境(Mac OS)中,我可以使用命令运行我的容器

docker run -e MONGO_URL='mongodb://host.docker.internal:27017/mydb' -p 8070:8000 -p 27017:27017 -d myimage:8933f

它工作正常,它连接到本地 MongoDB 实例(不是 dockerized,它是标准安装)。

问题是当我尝试在 Ubuntu 服务器中运行相同的图像时。它还有一个运行在 27017 端口上的 MongoDB。 当我尝试使用相同的命令运行图像时,它会输出:

docker:来自守护进程的错误响应:驱动程序外部编程失败 端点上的连接 priceless_cartwright (4a44248e01133f837144196943f6e034cb1a701a2bf783cde6e4996ea4889e4d): 启动用户态代理时出错:listen tcp 0.0.0.0:27017: bind: address 已经在使用中

我不知道会发生什么。我尝试用另一个端口(27117)用 Docker 启动一个 MongoDB,并在我的 docker run 命令中更改连接端口,但问题是一样的。

有什么帮助吗?

【问题讨论】:

    标签: mongodb docker ubuntu


    【解决方案1】:

    根据您的说法,您已经有一个在 27017 端口上运行 MongoDB 的容器。

    docker run -e MONGO_URL='mongodb://host.docker.internal:27017/mydb' -p 8070:8000 -p 27117:27017 -d myimage:8933f
    

    这不起作用,因为您正在尝试将 27117 绑定到 27017,但该端口已经在侦听您的 mongoDB 容器。

    【讨论】:

    • 27017上没有运行容器。27017上运行的是MongoDB本身(mongodb在这个端口上运行)。
    • 顺便说一句,我的代码中有一个错字。正确的是 -p 27017:27017。我正在尝试将“容器”端口 27017 与 27017 连接,这是运行 mongo db 服务器的位置。
    • 是的,但是 27017 已经被 mongoDB 使用了。您不能将已经打开的主机端口映射到 mongoDB 实例,以将其映射到容器。
    • 我想知道为什么它可以在我的本地环境中运行(27017 中也有一个 MongoDB,我可以连接到它)。无论如何,你知道将 Docker 容器连接到 MongoDB 的最佳方式是什么吗?
    • @ChristianBenseler - 你是说在一台计算机上安装了 MongoDB 并在端口 27017 上运行监听,而在同一台计算机上,Docker 试图启动一个依赖于主机端口 27107 的容器对于使用容器端口 27017 的容器内的 MongoDB?如果是这样,请关闭本地 MongoDB,然后尝试使用 Docker 命令启动容器以验证此端口资源争用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2020-08-04
    • 1970-01-01
    • 2018-11-09
    • 2022-11-30
    • 2015-07-03
    相关资源
    最近更新 更多