gpt4 book ai didi

networking - 如何在没有网桥的情况下连接 Docker 容器?

转载 作者:行者123 更新时间:2023-12-02 18:01:41 26 4
gpt4 key购买 nike

我正在做一些与 Docker 容器技术有关的实验。

我出于特定原因需要将两个 veth 容器接口(interface)连接在一起而不使用桥接器,Docker 默认创建桥接器,所以我不想使用它。

我很困惑,想知道这样做是否正确。任何人都可以提供建议并指出一些链接或方法吗?我会感激的。

非常感谢。

+--------------+          +--------------+
|              |          |              |
| Container X  |          | Container Y  |
|              |          |              |
+--------------+          +--------------+
            ^ veth           ^ veth       
            |                |            
            +----------------+            

最佳答案

当然,这是可能的,尽管你无法让 Docker 自动为你做这件事。首先创建两个没有网络的容器:

# docker run --net=none --name container_x ...
# docker run --net=none --name container_y ...

现在创建一个 veth一对:
# ip link add c_x_eth0 type veth peer name c_y_eth0

分配 veth 的每一侧与容器配对。您需要知道容器的 PID 才能执行此操作,您可以使用该 PID,例如:
docker inspect --format '{{.State.Pid}}' container_x

我假设你已经把它放在一个名为 docker-pid 的 shell 脚本中。 .在第一个 veth 上设置 namespace 关联:
# ip link set netns $(docker-pid container_x) dev c_x_eth0

在第二个:
# ip link set netns $(docker-pid container_y) dev c_y_eth0

现在您需要在每个容器内配置链接。如果您还没有使用 --privileged 启动容器,您需要使用 nsenter 执行此操作:
# nsenter -t $(docker-pid container_x) -n ip link set c_x_eth0 up
# nsenter -t $(docker-pid container_y) -n ip link set c_y_eth0 up

然后为他们分配 IP 地址:
# nsenter -t $(docker-pid container_x) -n ip addr add 10.10.10.1/24 dev c_x_eth0
# nsenter -t $(docker-pid container_y) -n ip addr add 10.10.10.2/24 dev c_y_eth0

你应该准备好了。

更新

如果 nsenter不可用...

最简单的解决方案就是安装 nsenter在您的系统上;如果您能够创建新的 veth接口(interface)并启动 Docker 容器,您应该拥有所需的所有权限。

您可以在没有 nsenter 的情况下完成上述操作如果您以特权模式( docker run --privileged...)运行容器。这将允许您的容器执行通常被禁止的操作——例如运行网络配置命令。在这种情况下,您只需运行 ip linkip addr容器中的命令,或者从您以 docker run 开始的 shell或使用类似 docker exec .您应该知道,在特权模式下运行容器会消除通常施加在容器上的许多限制,因此如果其他人有权访问这些容器,您就不想这样做。

关于networking - 如何在没有网桥的情况下连接 Docker 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31907117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com