当前位置: 首页 > 面试题库 >

从Docker容器连接到主机mongodb

沈曜灿
2023-03-14
问题内容

所以我想连接到我在主机上运行的mongodb(DO Drop,Ubuntu 16.04)。它27017在localhost 的默认端口上运行。

然后,我使用mup将我的Meteor应用程序部署在我的DO
Drop上,该DO
Drop使用docker在容器内运行Meteor应用程序。到目前为止,一切都很好。使用标准mongodb://...连接URL将应用程序连接到mongodb。现在我有以下问题:

mongodb://...@localhost:27017...显然不能在docker容器内工作,而localhost不是主机的本地主机。

我已经阅读了很多关于stackoverflow的文章,我已经尝试使用:

  • --network="host"-无法正常运行,因为它0.0.0.0:80已经被使用或类似的东西(nginx代理)
  • --add-host="local:<MY-DROPLET-INTERNET-IP>"并通过连接mongodb://...@local:27017...:也无法正常工作,因为我只能从本地主机访问我的mongodb,而不能从公共IP访问

这必须是一个普遍的问题!

tl; dr-localhost在Docker容器中公开主机的正确方法是什么,以便我可以连接到主机上运行的服务?(包括其端口,例如27017)。

我希望有人能帮帮忙!


问题答案:

您可以使用:172.17.0.1因为这是容器可以看到的默认主机ip。但是您需要配置Mongo来收听0.0.0.0

从docker 18.03起,建议连接到特殊的DNS名称host.docker.internal

对于以前的版本,您可以使用DNS名称docker.for.mac.localhostdocker.for.windows.localhost



 类似资料:
  • 问题内容: 我正在运行一个docker mysql映像,以下是docker-compose.yml文件的外观: 这很好。 我的问题是:如何从主机(我的Macbook)上的命令行mysql客户端连接到在该容器上运行的MySQL实例? 澄清: 我有一台装有Docker的Macbook 我有一个带有mysql的docker容器 我想从Macbook的终端连接到上述容器上运行的mysql实例 我不想使用命

  • (由于我对Docker或mysql管理的了解有限,这可能是一个愚蠢的问题,但由于我花了整整一个晚上讨论这个问题,所以我敢问这个问题。) 概括地说 我想在docker容器中运行mysql,并从我的主机连接到它。到目前为止,我取得的最好成绩是: 更多详细信息 我正在使用以下: 在有此文件的目录中,我可以成功地构建映像并运行它: 当我连接到图像上时,它似乎工作得很好: 然而,我并没有从主持人那里获得那么

  • 厘斯7.8 docker run -d -p 8080:80 --name nginxtest nginx docker ps CONTAINER ID Image PORTS NAMES xxxxxxxx nginx 0.0.0.0:8080- curl localhost:8080 < br > curl:(56)Recv失败:连接被对等方重置 netstat-tulpn<br>tcp6 0

  • 我正面临来自docker容器的MongoDB连接问题,我读了一些stackoverflow的答案,但没有帮助我解决我的问题。 我的application.yml文件有以下内容, 我的docker-compose文件有以下内容, 版本:'3.5'服务: sp-app-web-ui com.mongodb.mongosocketopenexception:异常打开socket sp-app-web-u

  • 我有一个swarm集群,我在其中创建了一个全局服务,在集群中的所有docker主机上运行。 目标是让此服务的每个容器实例连接到侦听docker主机上的端口。 有关详细信息,我将遵循此Docker守护进程指标指南,以在所有主机上公开新的docker指标API,然后将该主机端口代理到覆盖网络中,以便Prometheus可以从所有群主机中抓取指标。 我已经阅读了多个docker github问题#839

  • 澄清: 我有一台安装了Docker的macbook 我有一个带有MySQL的docker容器 我想从MacBook上的终端连接到在上述容器上运行的mysql实例 我不想使用命令来实现此操作。相反,我想直接从终端使用客户机(而不通过docker容器隧道进入)。 我没有在本地运行MySQL,所以端口3306应该是打开的,可以随时使用。 我用来启动容器的命令是: