首页 > 解决方案 > 为什么有人会为两个 docker 容器使用相同的网络命名空间?

问题描述

为什么要通过网络命名空间连接两个 docker 容器,而不仅仅是通过一个网络?

据我所知,唯一的区别是您可以使用 localhost 调用另一个容器。我没有看到任何需要这样做的用例。

这个事情谁有经验?

标签: dockernetworkingnamespacescontainersvirtualization

解决方案


我能想到的一个原因是使用容器中不可用的工具或命令。下面的这个例子直接来自docker run 文档

网络:集装箱

运行 Redis 容器并绑定 Redis 的示例,localhost然后运行redis-cli命令并通过接口连接到 Redis 服务器localhost

$ docker run -d --name redis example/redis --bind 127.0.0.1
$ # use the redis container's network stack to access localhost
$ docker run --rm -it --network container:redis example/redis-cli -h 127.0.0.1

以类似的方式,可以使用这种技术来调试容器。例如,如果您的容器没有tcpdump,您可以创建一个包含它的图像:

docker build -t tcpdump - <<EOF 
FROM ubuntu 
RUN apt-get update && apt-get install -y tcpdump 
CMD tcpdump -i eth0 
EOF

run一个用于调试您的应用程序的容器:

docker run --rm --net=container:my-app tcpdump

如果您的问题更多关于Kubernetes,一些有趣的链接是:


推荐阅读