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
    • 最新
    • 标签
主页 / unix / 问题 / 787069
Accepted
TheYokai
TheYokai
Asked: 2024-11-23 05:38:37 +0800 CST2024-11-23 05:38:37 +0800 CST 2024-11-23 05:38:37 +0800 CST

Podman 和 Docker:在服务之间共享网络和/或主机名解析?

  • 772

因此,我有一个名为的 Docker 网络home,其中包含所有基于根的容器(或难以移植到 podman 的 Docker 容器)。

sudo docker network ls
NETWORK ID     NAME                 DRIVER    SCOPE
9d5788b45048   bridge               bridge    local
b1f4756feab4   home                 bridge    local
5d7ee6579f19   host                 host      local
8678a773e2f2   none                 null      local

而且,对于 podman,我有一个非常相似的配置。

podman network ls
NETWORK ID    NAME        DRIVER
8b17ae3d5d67  home        bridge  
2f259bab93aa  podman      bridge

问题是什么?好吧,事实证明,我的容器名称解析在一个网络到另一个网络之间不起作用。例如,我nginx-proxy-manager在 podman 上运行,我想http://domain/freshrss通过指定和关联的端口号重定向到 freshrss 服务freshrss。这不起作用,这对我来说很有意义,因为 docker 网络和 podman 网络从根本上是彼此分离的。

所以我的问题很简单:有没有办法将这两个网络桥接在一起,将它们视为一个网络,而不会损害个性化网络配置的完整性?或者,有没有办法让我解决这个通信问题,而不必在转发名称和端口中重新指定域名?例如,我认为转发到127.0.0.1:<freshrss port>会起作用,因为它会转到主机,然后连接到适当的端口,但那不起作用。

docker/podman compose欢迎提供有针对性的答案,因为这就是我配置我的服务的方式。

networking
  • 1 1 个回答
  • 11 Views

1 个回答

  • Voted
  1. Best Answer
    larsks
    2024-11-23T05:49:46+08:002024-11-23T05:49:46+08:00

    例如,我认为转发到 127.0.0.1: 会起作用,因为它会转到主机,

    127.0.0.1在容器内,始终表示“此容器”(除非您在主机网络模式下运行)。如果要引用主机上发布的端口,则需要使用分配给主机接口之一的 IP 地址。在许多情况下,您可以使用魔术主机名来引用您的主机;在 Podman 的最新版本中,默认情况下可以使用此功能,而在 Docker 中,如果 (a) 您在 Windows 或 MacOS 上使用 Docker Desktop,或者 (b) 您使用的是 Linux 并在命令行中host.docker.internal包含此功能,则可以使用此功能。--add-host host.docker.internal:host-gatewaydocker run

    这意味着如果你运行这样的容器:

    docker run -d --name myservice -p 8888:8888 myservice:latest 
    

    然后,您可以从 podman 或 docker 容器像这样访问该服务:

    curl http://host.docker.internal:8888
    

    没有简单的方法可以在两个环境之间进行名称解析。

    最简单的解决方案是选择 podman 或 docker 中的一个。从你的问题中看不出你为什么要同时使用两者。请注意,docker compose如果你启用了 docker 兼容性 API,那么使用 Podman 作为容器引擎就可以正常工作。

    在这里我们启用 podman 用户(非 root)套接字并设置指向该套接字的 docker 上下文:

    $ systemctl --user enable podman.socket
    

    我们可以将DOCKER_HOST环境变量指向 podman 套接字:

    $ export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock
    

    现在 docker 命令将与 podman 交互。例如:

    $ docker compose up -d
    [+] Running 2/2
     ✔ Network example_default  Created                                                                                                        0.0s
     ✔ Container example-web-1  Started                                                                                                        0.4s
    $ podman ps
    CONTAINER ID  IMAGE                            COMMAND     CREATED        STATUS        PORTS                           NAMES
    5657fc3dde19  docker.io/traefik/whoami:latest              8 seconds ago  Up 9 seconds  0.0.0.0:8888->8888/tcp, 80/tcp  example-web-1
    

    该docker context命令允许您创建引用不同远程套接字的命名配置。我们可以创建podman-user这样的上下文:

    docker context create podman-user --docker host=unix:///run/user/$UID/podman/podman.sock
    

    如果我们激活上下文:

    docker context use podman-user
    

    所有后续 Docker 命令都将针对 podman 套接字进行操作。然后,您可以docker context use default切换回连接到本地 Docker 守护程序的默认上下文。

    • 1

相关问题

  • 查找与端口关联的线程/脚本?

  • 关于网络挂载文件的问题

  • IP地址可以以255结尾而不是广播IP地址吗?

  • 无法识别arp命令或ip命令哪个MAC地址输出正确

  • 奇怪的路由器与centos 6一起工作[关闭]

Sidebar

Stats

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

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve