📜  通过同一网络连接两个 Docker 容器

📅  最后修改于: 2022-05-13 01:56:18.084000             🧑  作者: Mango

通过同一网络连接两个 Docker 容器

每当我们在 docker 中公开一个容器的端口时,它都会从该机器外部通过网络层创建一个网络路径,然后进入该容器。通过这种方式,其他容器可以连接到它,方法是出去到主机,转身,然后沿着该路径返回。
Docker 提供了一组广泛的网络选项,用于准确控制容器之间的连接方式,并确保它是安全的并且与您想要的方式相同。

在深入研究本文之前,我建议您先了解一下 Docker 和计算机网络的基础知识,以便更清楚地了解幕后究竟发生了什么。

容器通信:

尽管隔离,容器经常需要相互交互,甚至与外部世界交互。这种交互的处理可以通过容器之间的联网来实现。它本质上意味着一个容器中的应用程序将通过另一个容器中的端口建立网络连接。在本文中,我们将学习链接容器并使它们相互通信的基础知识。我们将在两个不同的容器上运行 ubuntu,定义一个端口号并让它们通过网络进行通信。

打开终端。

让我们先看看现有的网络,看看默认情况下都有什么。

docker network ls

我们可以看到默认情况下存在 3 个网络:

  1. Bridge是容器使用的网络,它们没有指定要放入任何其他网络的首选项。这意味着桥接网络为您在同一主机上的容器之间提供了非常基本的通信。
  2. 主机是当您不希望容器具有任何网络隔离时。这意味着该网络可能存在安全问题。
  3. None是你的容器不能有网络的时候。

使用以下命令创建您自己的网络:

docker network create learn-networking 

这样,我们创建了一个名为learn-networking 的网络。您可以给网络起任何您想要的名称。现在我们将通过这个网络连接我们的容器。

并排打开两个终端。在其中一个终端中键入以下命令,通过网络学习网络创建一个名为conatiner1的新容器。

docker run --rm -ti --net learn-networking --name container1 ubuntu:14.04 bash

这里:

  • -rm命令在我们停止容器后立即删除它。
  • -ti代表终端交互。
  • --net用于设置容器的网络。
  • --name用于指定容器的名称。这里容器的名称是container1

现在在另一个终端上通过相同的网络learn-networking创建一个名为container2的新容器。

docker run --rm -ti --net learn-networking --name container2 ubuntu:14.04 bash

现在我们有两个容器正在运行, container1container2

此外,如果您打开 Docker 桌面并转到容器部分,您将看到我们刚刚创建的两个容器正在运行。

现在我们将指定container2将侦听的端口号。所以为此,在运行container2的终端,编写命令

nc -lp 1234

这个命令说, netcat 监听端口 1234 。您可以在此处指定任何端口号。

在运行container1的终端上,通过1234端口将其连接到container2 ,方法是编写以下命令

nc container2 1234

在此之后,两个容器都通过网络学习网络上的端口号 1234 连接。

在终端 1 上键入任何内容,它将在终端 2 上复制。这意味着通过网络在两个容器之间共享数据已经开始。

注意:为了共享数据和使容器相互通信,它们必须在同一个网络上。