我阅读了我所能找到的所有内容,但是对于podman来说,关于这个场景的文档很少或者不清楚。我有以下(人为的) ROOTLESS podman设置:
pod1
pod1中的容器名称- `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`pod2
pod2中的容器名称- `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,并将容器作为组来管理。
问题
给出上面的拓扑,我如何在p1c1和p2c1之间进行通信?换句话说,一步一步地执行什么podman(1)命令来收集pod1:p1c1和pod2:p2c1所需的addressing information,然后使用这些信息在其中配置应用程序,以便它们能够相互通信?
提前谢谢你!
编辑:对于搜索者,更多信息可以找到这里。
发布于 2021-04-16 16:01:02
Podman并没有任何类似“服务”概念的群集或Kubernetes,以提供服务发现之间的豆荚。你的选择归结为:
对于第一个解决方案,我们首先创建一个网络:
podman network create shared然后创建连接到shared网络的两个吊舱:
podman pod create --name pod1 --network shared
podman pod create --name pod2 --network shared如果两个吊舱在同一个网络上运行,容器可以按名称引用另一个吊舱。例如,如果您在端口80上运行p1c1中的web服务,则可以在p2c1中运行curl http://pod1。
对于第二种选择,您可以这样做:
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试过。
发布于 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。
https://stackoverflow.com/questions/67126730
复制相似问题