与外部数据库通信的Docker容器

10
我正在将一个应用程序移植到Docker上。该应用程序有一个反向代理的nginx,位于前端,将请求重定向到前端应用程序。然后,前端应用程序链接到后端的Java应用程序。最后,使用的是MongoDB数据库。我不想将MongoDB移动到容器中,因此希望我的应用程序能够直接与MongoDB通信。我使用docker-compose来启动我的容器。我的问题是如何使用docker-compose使我的容器与MongoDB进行通信。我搜索了以下链接,其中提到了这个功能,并计划添加到Docker中。但是我找不到一个具体的例子。我对docker还不熟悉,因此任何帮助都将不胜感激。https://github.com/docker/compose/issues/1110

也许是extra_hosts?https://docs.docker.com/compose/compose-file/#/extrahosts - Salem
1个回答

4
首先,将任何持久数据留在镜像外部是最佳实践,所以您做出了一个好决定;)
因此,要连接到托管在主机上的数据库,请按照以下步骤进行操作:
  1. 首先,您需要找到Docker网络中主机的IP地址。如果您正在运行某个Linux发行版,则可以在控制台上键入ip a,如果您正在运行Windows,则可以键入ipconfig /all。您可以看到IP地址在docker桥接适配器旁边(如果您正在使用默认适配器,则应为docker0,该行应以inet开头)。
  2. 然后确保数据库用户没有限制通过外部网络进行连接。
  3. 当您获得主机(IP地址)、数据库、数据库用户和数据库密码时,只需将它们放入应用程序的数据库配置中。
这样就完成了工作。

谢谢您的回答。我忘了澄清一下,我正在Windows主机上运行Ubuntu虚拟机,然后在Ubuntu虚拟机上运行Docker。输入ip a会给出虚拟机的内部IP地址,有什么想法吗? - Asim
数据库在哪里?在物理机器(Windows)上还是虚拟机器(Ubuntu)上? - Radoslav Stoyanov
数据库位于 Microsoft Azure 中。我正在本地构建应用程序,稍后将部署到 Azure。 - Asim
@Asim 你能在Azure中找到数据库设置吗?你需要主机(IP),并且应该有一个设置来允许哪些IP连接。那里你应该输入你本地物理机器的IP地址(其中一个带有Windows)。之后,你必须在物理机器和虚拟机之间设置端口转发,用于端口27018。然后,在你的应用程序中的数据库配置中放置你在Azure中找到的IP地址。 - Radoslav Stoyanov
这是一个很好的教程,介绍了如何在使用虚拟机时设置端口转发并将其用作服务器。 - Radoslav Stoyanov
@Radsolav Stoyanov 非常感谢,我会尝试一下。 - Asim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接