Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何协调docker容器之间的端口_Docker - Fatal编程技术网

如何协调docker容器之间的端口

如何协调docker容器之间的端口,docker,Docker,我已经安装了docker,使用主机网络在服务器上托管多个容器,因此所有容器之间共享端口。如果一个集装箱使用8000端口,其他集装箱无法使用。是否有一个工具——也许没有k8s那么复杂,但我不知道它是否可以做到——来帮助我为每个容器选择端口?随着主机网络上服务数量的增加,管理可用端口列表变得非常困难 我仍然不明白为什么在运行docker ps时,某些容器根本没有列出端口。如果可以很容易地获得完整的端口列表,这会更容易,但是我有两个容器,其中有一个相当大的暴露端口列表,其中根本没有显示任何端口。我想这

我已经安装了docker,使用主机网络在服务器上托管多个容器,因此所有容器之间共享端口。如果一个集装箱使用8000端口,其他集装箱无法使用。是否有一个工具——也许没有k8s那么复杂,但我不知道它是否可以做到——来帮助我为每个容器选择端口?随着主机网络上服务数量的增加,管理可用端口列表变得非常困难


我仍然不明白为什么在运行
docker ps
时,某些容器根本没有列出端口。如果可以很容易地获得完整的端口列表,这会更容易,但是我有两个容器,其中有一个相当大的暴露端口列表,其中根本没有显示任何端口。我想这是一个单独的问题,不太重要。

Pod中的容器可以通过“localhost”访问;它们使用相同的网络名称空间。此外,对于容器,可观察的主机名是Pod的名称。因为容器共享相同的IP地址和端口空间,所以您应该在容器中为传入连接使用不同的端口。换句话说,Pod中的应用程序必须协调端口的使用

在下面的示例中,我们将创建一个多容器Pod,其中一个容器中的nginx充当在第二个容器中运行的简单web应用程序的反向代理

第一步。使用nginx配置文件创建ConfigMap。到端口80的传入HTTP请求将转发到本地主机上的端口5000 第二步。在单独的容器中使用简单的web应用程序和nginx创建一个多容器Pod。请注意,对于Pod,我们仅定义nginx端口80。Pod外部无法访问端口5000。 第三步。使用NodePort服务公开Pod: $kubectl暴露pod mc3--类型=节点端口--端口=80 服务“mc3”暴露 现在,您可以使用浏览器(或curl)导航到节点的端口以访问web应用程序


一个吊舱中的几个容器在不同的端口上侦听是很常见的,所有这些端口都需要暴露出来。要实现这一点,您可以创建具有多个公开端口的单个服务,也可以为尝试公开的每个端口创建单个服务。

Pod中的容器可以通过“localhost”访问;它们使用相同的网络名称空间。此外,对于容器,可观察的主机名是Pod的名称。因为容器共享相同的IP地址和端口空间,所以您应该在容器中为传入连接使用不同的端口。换句话说,Pod中的应用程序必须协调端口的使用

在下面的示例中,我们将创建一个多容器Pod,其中一个容器中的nginx充当在第二个容器中运行的简单web应用程序的反向代理

第一步。使用nginx配置文件创建ConfigMap。到端口80的传入HTTP请求将转发到本地主机上的端口5000 第二步。在单独的容器中使用简单的web应用程序和nginx创建一个多容器Pod。请注意,对于Pod,我们仅定义nginx端口80。Pod外部无法访问端口5000。 第三步。使用NodePort服务公开Pod: $kubectl暴露pod mc3--类型=节点端口--端口=80 服务“mc3”暴露 现在,您可以使用浏览器(或curl)导航到节点的端口以访问web应用程序


一个吊舱中的几个容器在不同的端口上侦听是很常见的,所有这些端口都需要暴露出来。要实现这一点,您可以创建具有多个公开端口的单个服务,也可以为尝试公开的每个端口创建单个服务。

Docker Swarm不如k8受欢迎,但更容易理解。在这个模型中,每个容器都变成了它自己的服务,可以在不同的主机名上访问,因此所有服务理论上都可以公开相同的端口,而不会发生冲突您使用主机网络禁用Docker的网络堆栈,因此您失去了重新映射端口的能力,而且任何服务碰巧监听的内容都不会在Docker的元数据中报告。@DavidMaze这解释了很多,谢谢。我想这是我应该看看macvlan来处理这个问题的证据。Docker Swarm不如k8受欢迎,但更容易理解。在这个模型中,每个容器都变成了它自己的服务,可以在不同的主机名上访问,因此所有服务理论上都可以公开相同的端口,而不会发生冲突您使用主机网络禁用Docker的网络堆栈,因此您失去了重新映射端口的能力,而且任何服务碰巧监听的内容都不会在Docker的元数据中报告。@DavidMaze这解释了很多,谢谢。我想这是我应该看看macvlan来处理这个问题的证据。