首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在无根的podman设置中,如何在不同荚中的容器之间进行通信。

在无根的podman设置中,如何在不同荚中的容器之间进行通信。
EN

Stack Overflow用户
提问于 2021-04-16 14:07:18
回答 2查看 10K关注 0票数 5

我阅读了我所能找到的所有内容,但是对于podman来说,关于这个场景的文档很少或者不清楚。我有以下(人为的) ROOTLESS podman设置:

  • pod-1名称:pod1 pod1中的容器名称
代码语言:javascript
复制
- `p1c1`  -- This is also it's assigned `hostname` within `pod1`
- `p1c2`  -- This is also it's assigned `hostname` within `pod1`
- `p1c3`  -- This is also it's assigned `hostname` within `pod1`
  • pod-2名称:pod2 pod2中的容器名称
代码语言:javascript
复制
- `p2c1`  -- This is also it's assigned `hostname` within `pod2`
- `p2c2`  -- This is also it's assigned `hostname` within `pod2`
- `p2c3`  -- This is also it's assigned `hostname` within `pod2`

我将某些容器专门保存在不同的pods中,以避免port conflict,并将容器作为组来管理。

问题

给出上面的拓扑,我如何在p1c1p2c1之间进行通信?换句话说,一步一步地执行什么podman(1)命令来收集pod1:p1c1pod2:p2c1所需的addressing information,然后使用这些信息在其中配置应用程序,以便它们能够相互通信?

提前谢谢你!

编辑:对于搜索者,更多信息可以找到这里

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-16 16:01:02

Podman并没有任何类似“服务”概念的群集或Kubernetes,以提供服务发现之间的豆荚。你的选择归结为:

  1. 在同一个网络命名空间中运行两个荚,或
  2. 通过在主机端口上发布服务来公开服务,然后通过主机访问它们。

对于第一个解决方案,我们首先创建一个网络:

代码语言:javascript
复制
podman network create shared

然后创建连接到shared网络的两个吊舱:

代码语言:javascript
复制
podman pod create --name pod1 --network shared
podman pod create --name pod2 --network shared

如果两个吊舱在同一个网络上运行,容器可以按名称引用另一个吊舱。例如,如果您在端口80上运行p1c1中的web服务,则可以在p2c1中运行curl http://pod1

对于第二种选择,您可以这样做:

代码语言:javascript
复制
podman pod create --name pod1 -p 1234:1234 ...
podman pod create --name pod2 ...

现在,如果p1c1有一个监听端口1234的服务,您可以从p2c1 at <some_host_address>:1234访问该服务。

如果我正确地解释了选项1,如果p1c1和p2c1中的应用程序都使用端口8080;那么在任何地方(无论是在豆荚内部还是在外部主机内),如果我使用这样的方式发布: p1c1中的app为8080:8080,p2c1中的app为8081:8080?这个解释正确吗?

是这样的。每个pod都使用自己的网络命名空间运行(实际上,它有自己的ip地址),因此不同荚中的服务可以在同一个端口上侦听。

豆荚的网络(而不是端口)一旦运行就能重新分配吗?原因:我正在使用podman-撰写(1),它为您在一个吊舱中创建东西,但我可能需要改变的事情(如网络分配)后,事实。这能办到吗?

通常,您不能更改荚或容器的配置;您只能删除它并创建一个新的配置。假设podman-compose相对完整地支持docker-compose.yaml格式,您应该能够在docker-compose.yaml文件中正确地设置网络(您将手动创建网络,然后在撰写文件中将其引用为external网络)。

这里是指向相关Docker文档的链接。我自己也没和podman试过。

票数 6
EN

Stack Overflow用户

发布于 2021-10-17 21:50:15

“larsks”的接受回答只适用于rootful容器。换句话说,使用sudo前缀运行每个podman命令。(例如,当您从spring应用程序容器连接postgres容器时,您将得到SocketTimeout异常)

如果两个容器将在同一台主机上工作,则获取主机的ip地址,然后是<ipOfHost>:<port>。示例:192.168.1.22:5432

有关更多信息,请阅读本博客=> https://www.redhat.com/sysadmin/container-networking-podman

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67126730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档