首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker网络架构:隔离容器,基于主机的路由

Docker网络架构:隔离容器,基于主机的路由
EN

Stack Overflow用户
提问于 2020-10-01 20:21:59
回答 1查看 213关注 0票数 0

当我时不时地和docker玩的时候,我挂在一个问题上,我不能再继续下去了。

我想创建一个公共“云”,用户可以在其中创建自己的容器。容器只是一个http应用程序,例如nextcloud。

最好的方法是将容器彼此隔离,并允许通过docker主机到互联网的通信,这样如果必要的话,我可以阻止每个防火墙的一些IP。

这应该同时适用于传入和传出连接。

我为此创建了一个设置,这里描述了:docker macvlan - no route to host (container),但甚至无法使基本设置正常工作。

为了更好地理解,我创建了一个图表:

在docker主机上运行的反向代理查找特定的http报头,并根据该报头将请求转发到所需的容器。

最大的问题是网络设置:我不知道docker、主机和其他什么需要配置才能让它工作。

linux下的网络不是我的强项。

编辑:也许我遇到了XY问题(https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)

EN

回答 1

Stack Overflow用户

发布于 2020-10-01 21:28:57

我做的事情可能有点太简单了,但我不认为你需要使用macvlan。每个容器的正常网络足以分隔所有容器。所有与主机的通信都将通过网关进行。

我只是做了几个有趣的测试:

设置:

代码语言:javascript
复制
rm -f addresses.txt
for i in $( seq 1 5 ) ; do 
    docker network create test$i
done

for i in $( seq 1 5 ) ; do 
    docker run -d --rm \
        --name myspecialtest$i \
        --network test$i \
        alpine sleep 3600

    docker exec -it myspecialtest$i ifconfig eth0 \
        | grep -P -o 'inet addr:\d+\.\d+.\d+.\d+' \
        | cut -d: -f2 >> addresses.txt
done

测试:

代码语言:javascript
复制
for i in $( seq 1 5 ) ; do 
    for ipaddress in $( cat addresses.txt ); do
        docker exec -it myspecialtest$i \
            ping -w 5 $ipaddress
    done
done

清理:

代码语言:javascript
复制
for i in $( seq 1 5 ) ; do
    docker container rm -f myspecialtest$i
    docker network rm test$i
done

正如您所看到的,容器将只能ping自身,而不能ping其他容器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64155312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档