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

如何设置Docker容器之间的链接,以便重启不会中断它?

芮意
2023-03-14
问题内容

我有一些运行如下的Docker容器:

  • Nginx的
  • 网路应用程式1
  • 网路应用程式2
  • PostgreSQL的

由于Nginx需要连接到Web应用程序1和2中的Web应用程序服务器,并且Web应用程序需要与PostgreSQL通讯,所以我有这样的链接:

  • Nginx —链接—> Web应用程序1
  • Nginx —链接—> Web应用程序2
  • Web应用程序1 —链接—> PostgreSQL
  • Web应用程序2 —链接—> PostgreSQL

起初这很好用。但是,当我开发Web应用程序1和Web应用程序2的新版本时,需要替换它们。我要做的是删除Web应用程序容器,设置新容器并启动它们。

对于Web应用程序容器,其IP地址起初类似于:

  • 172.17.0.2
  • 172.17.0.3

在更换它们之后,它们将具有新的IP地址:

  • 172.17.0.5
  • 172.17.0.6

现在,Nginx容器中那些公开的环境变量仍然指向旧的IP地址。问题来了。如何更换容器而不破坏容器之间的链接?PostgreSQL也将发生相同的问题。如果要升级PostgreSQL映像版本,我当然需要删除它并运行新版本,但是随后我需要重建整个容器图,因此对于实际的服务器操作而言,这不是理想的选择。


问题答案:

的效果--link是静态的,因此它不适用于您的情况(尽管可以删除链接,但目前没有重新链接)。

我们在dockerize.it上使用了两种不同的方法来解决此问题,而没有链接或大使(尽管您也可以添加大使)。

1)使用动态DNS

通常的想法是,在启动和停止容器时,为数据库(或任何其他服务)指定一个名称,并使用实际IP更新短暂的DNS服务器。

我们从SkyDock开始。它与两个docker容器,DNS服务器和一个使其自动更新的监视器一起使用。后来,我们使用Consul(还使用了dockerized版本:docker
-consul)转向了更多自定义项。

这种情况的演变(我们尚未尝试过)将设置etcd或类似的东西,并使用其自定义API来学习IP和端口。该软件也应该支持动态重配置。

2)使用docker bridge ip

公开容器端口时,您可以将它们绑定到docker0网桥,该网桥具有(或可以具有)众所周知的地址。

用新版本替换容器时,只需使新容器在相同IP上发布相同端口即可。

这比较简单,但也有更多限制。如果您运行类似的软件,您可能会遇到端口冲突(例如,两个容器无法在docker0网桥上的3306端口上侦听)等问题,因此我们目前最喜欢的是选项1。



 类似资料:
  • 我今天使用应用程序容器/媒体维基泊出程序映像部署了MediaWiki的一个实例,我现在遇到了一个新问题,我找不到任何线索。尝试使用以下命令附加到媒体维基前端容器后: 由于我忽略的原因,它在我的配置中回答< code >终止,并尝试: 我确实收到了一些接近错误消息的内容: 这是我的新问题,因为这个容器永远不会停止重新启动。我可以看到,使用<code>docker ps-a。 问题是,我能够停止容器(

  • 只有在使用“旧的”版本1格式时,我才会在容器的/etc/hosts中看到链接。 我有以下基本版本2 docker-compose.yml文件。 当我运行以下命令时: null

  • 容器应该能够保持状态吗?我使用的是这样的SQLServer映像。 然后我使用dotnet ef在其中创建了一个数据库。 数据库工作正常,直到我重新启动容器。此时,我的数据库是gona,容器被重置为初始状态。 我错过了什么?容器不保持状态吗?如果是的话,在数据库中使用它们有什么意义?

  • 问题内容: 我必须链接两个容器,以便它们可以互相看到。当然以下… …在第1行失败,因为容器需要启动并运行才能成为链接目标: 创建双向链接的最简单方法是什么? 问题答案: Docker 1.10通过引入高级容器网络很好地解决了这一问题。(详细信息:https : //docs.docker.com/engine/userguide/networking/dockernetworks/) 首先,创建一

  • 问题内容: 假设重新启动操作系统时,通过init.d或类似systemd的进程自动重启了Docker守护进程,那么重启一个或多个Docker容器的首选方式是什么?例如,我可能在反向代理或数据库服务器后面有许多Web服务器。 问题答案: CoreOS使用systemd来管理长期运行的服务: https://coreos.com/os/docs/latest/getting-started-with-

  • 编辑:我正在玩安装>1卷,可能发现了一些东西。如果我挂载一个镜像符号链接路径的卷,那么它似乎可以工作。例如,如果我有一个数据文件夹在容器内的/work目录中符号链接到/media/disk1(并且/work映射到主机上的/home),我可以挂载另一个卷,将/media/disk1附加到/work/data(并且/media/disk1符号链接到主机上的/home/data),那么符号链接在容器内工