作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做一些与 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
# 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 link
和
ip addr
容器中的命令,或者从您以
docker run
开始的 shell或使用类似
docker exec
.您应该知道,在特权模式下运行容器会消除通常施加在容器上的许多限制,因此如果其他人有权访问这些容器,您就不想这样做。
关于networking - 如何在没有网桥的情况下连接 Docker 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31907117/
我是一名优秀的程序员,十分优秀!