我将容器放在不同的容器中,以更好地组织我的应用程序。这是我的设置:
现在,我希望 NginX 代理管理器 (NPM) 与 Node-red 对话。
我的命令如下:
podman network create public
podman pod create --name pod1 --network public -p 2080:80,2081:81,2443:443
podman pod create --name pod2 --network public
podman run -d --pod pod1 --name db -e MYSQL_ROOT_PASSWORD=... jc21/mariadb-aria:latest
podman run -d --pod pod1 --name nom -e ... jc21/nginx-proxy-manager:latest
podman run -d --pod pod2 --name my-node-red node red/node-red:latest
我在 Windows 上使用 WSL podman 机器进行了类似的设置,无根,并且它可以工作,即我可以从 npm ping node-red,但它在我的 OpenSUSE Micro 服务器上不起作用。当我查找node-red容器的IP时,npm可以通过IP到达node-red,所以这只是一个DNS问题。
一些帖子指出了 podman-plugins 包,从描述来看,它似乎解决了 DNS 问题。然而,该软件包从今天起已被弃用,从描述来看,它似乎已成为 podman 网络的一部分。
我正在寻找的是DNS解析,以便NPM可以通过pod名称找到node-red,即在NPM中,我可以指向pod2,而不是pod2的IP。
注意:我在 OpenSUSE Leap Micro 中运行 Podman 4.4.4。
我终于找到了答案,我发现Podman社区反应非常迟钝。我希望这种情况在不久的将来会改变。
发生的情况是,当我安装 OpenSUSE Leap 上的最新产品 podman 4.4.4 时,默认网络后端是 CNI,它不支持容器 DNS。我所做的是安装 netavark 和 aardvark-dns。
# Depending on your distro, you may have different installation commands
# This is for OpenSUSE Leap Micro
sudo transactional-update reboot pkg in netavark aardvark-dns
之后,我重置了我的 podman 机器。也许有一种方法可以只更改网络后端,但重置 podman 机器会删除所有内容;图像、容器、pod。无论如何,从现在开始,当我创建网络时,默认网络后端是netavark,它具有容器 DNS。
podman network create some-network
您现在可以创建无根容器和 Pod,并让它们通过 Pod 名称相互通信。我还没有尝试过在 pod 之外的容器中使用容器名称,但我怀疑它也能工作。
BR