AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1131478
Accepted
chutz
chutz
Asked: 2023-05-19 06:01:56 +0800 CST2023-05-19 06:01:56 +0800 CST 2023-05-19 06:01:56 +0800 CST

如何配置 podman 容器以让它也与主机通信?

  • 772

是否有可能...

  • 使用 podman 运行容器
  • 它在主机所在的同一子网上有一个 IP
  • 可以从子网上的所有其他主机访问
  • 包括主机本身?

我使用 macvlan 和 ipvlan 驱动程序取得了部分成功——我能够运行一个容器,给它一个 IP 地址,然后这个 IP 可以从网络上的所有其他主机访问。

但是,我无法访问运行容器的主机或从主机访问。

我什至尝试使用最新版本的podman、netavark、cni-plugins从源代码构建,这使 ipvlan 驱动程序具有相同的结果。

我更喜欢指向描述如何完成此操作的指南的指针,但也欢迎提供故障排除建议。

networking
  • 2 2 个回答
  • 101 Views

2 个回答

  • Voted
  1. Best Answer
    chutz
    2023-05-30T12:54:20+08:002023-05-30T12:54:20+08:00

    为此,我只需要在主机上添加一个额外的 ipvlan 接口,如果 podman 也使用 ipvlan,它允许我与容器对话。

    • 指定主机将从中访问此容器的网络。例如,10.0.0.0/16
    • 分配一个子网以在容器中使用。如果它是我家庭网络的子网更好。例如,10.0.99.0/24。该子网应专用于该主机上的容器。
    • 创建一个 ipvlan podman 网络以与容器一起使用。它将是与主机网络相同的子网,但 IP 分配应从较小的子网开始定义。例如:
    sudo podman network create -d ipvlan --subnet 10.0.0.0/16 --ip-range 10.0.99.0/24 --ipam-driver host-local podnet
    
    • 创建主机 IPVlan 接口并为其分配来自容器网络的 IP 地址。例如,10.0.99.1。这是主机可以用来与容器对话的接口。
    • 更新 podman 网络以跳过主机使用的 IP 地址: sudo vim /etc/cni/net.d/podnet.conflist 并将 rangeStart 从 更改10.0.99.1为10.0.99.2。

    要使用 systemd 创建 ipvlan 接口,我必须

    1. 将 a 添加IPVLAN = podnet到[Network]定义我的主机网络接口的文件部分,这将创建一个podnet插入父级的网络接口。
    2. 为接口创建配置:
    cat > /etc/systemd/network/podnet.netdev <<EOF
    [NetDev]
    Name = podnet
    Kind = ipvlan
    EOF
    cat > /etc/systemd/network/podnet.network <<EOF
    [Match]
    Name = podnet
    [Network]
    IPForward = yes
    Address = 10.0.99.1/24
    EOF
    

    平心而论,同样的方法适用于 macvlan 而不是 ipvlan,但是我的部分网络无法通过 MACVlan 接口访问主机,因此我切换到 IPVlan 以获得更好的互操作性。

    我遇到的另一个问题是由于 podman 默认为 netavark,而 netavark IPVlan 支持仅在 podman 4.5+ 中可用,而我仍在使用 4.3。切换网络后端以cni解决此问题。

    cat > /etc/containers/containers.conf <<EOF
    [network]
    network_backend = "cni"
    EOF
    
    • 1
  2. Gal Weiss
    2023-05-21T03:52:52+08:002023-05-21T03:52:52+08:00

    不完全是你问的,但你可以很简单地与主机共享相同的 IP 地址,继续阅读以查看它是否对你有任何帮助:

    你需要做的是添加到podman run这--network=host 实质上意味着你与主机共享相同的网络堆栈,所以你应该考虑以下几点:

    • 您不能使用与主机相同的侦听端口。因此,例如 - 如果您将服务器作为端口 80 运行,则主机无法执行此操作。
    • 您的容器可以访问主机上的本地 (127.0.0.1) 服务,反之亦然。基本上,您通过这种方式“包含”的方式更少。这有利有弊,请确保您知道自己在做什么。
    • 0

相关问题

  • 谁能指出我的 802.11n 范围扩展器?

  • 我怎样才能得到一个网站的IP地址?

  • 在一个 LAN 中使用两台 DHCP 服务器

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve