前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >同宿主机暴露多个docker容器IP

同宿主机暴露多个docker容器IP

原创
作者头像
DifficultWork
发布2023-01-31 05:25:02
1.9K0
发布2023-01-31 05:25:02
举报
文章被收录于专栏:阶梯计划阶梯计划

1 背景

使用docker时,如果想从局域网访问容器,比较常用的方式是将容器的网络模式设置为host模式,或者使用端口映射。但如果想部署多个应用并使用相同的端口,前面这两种方式就不适用了。

使用docker的macvlan网络可以解决这个问题。

2 前提

宿主机所在网络需要有一个交换机作为网关,并且局域网网段有富余的IP。

可以在linux命令行执行lsmod | grep macvlan查看当前内核是否加载了该驱动;如果没有查到,可以通过modprobe macvlan来载入。

3 创建docker macvlan网络

使用如下命令创建一个macvlan网络:

代码语言:shell
复制
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.10 -o parent=eth0 macvlan

参数

作用

--subnet

指定网段,这里需要和宿主机eth0所在LAN保持一致

--gateway

指定网关,需要使用宿主机eht0的IP作为网关

parent

父网卡,指定宿主机的网卡

创建完成后使用docker network ls查看:

代码语言:shell
复制
docker network ls
NETWORK ID      NAME                  DRIVER               SCOPE
a71929db3c97    bridge                bridge               local
92f0af272616    host                  host                 local
f551a7dc8266    macvlan               macvlan              local
db500edb2d7b    none                  null                 local

2 基于macvlan网络创建容器

代码语言:shell
复制
docker run --net=macvlan --ip=192.168.1.12 --name test -itd alpine:3.6

然后进入容器docker exec -it test /bin/sh,通过ifconfig可以查看容器的网卡信息。

在容器里ping网关192.168.1.10是无法ping通的,这是由于macvlan模式设计的时候为了安全禁止了宿主机和容器直接通信,ping的回包无法到达容器。

3 创建macvlan bridge

要实现宿主机和容器互通,需要在宿主机上再创建一个macvlan网络设备,将这个设备作为bridge,再修改路由使宿主机访问容器时指向该设备。

建立一个名为macbridge的macvlan设备,并分配ip:

代码语言:shell
复制
ip link add macbridge link eth0 type macvlan mode bridge
ip addr add 192.168.1.11 dev macbridge
ip link set macbridge up

创建完成后通过ifconfig可以看到新增的设备。然后添加路由(如果有多个容器则需要加多条):

代码语言:shell
复制
ip route add 192.168.1.12 dev macbridge

完成后通过宿主机就可以ping通容器test了。

该容器可以被LAN中其他宿主机访问了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 背景
  • 2 前提
  • 3 创建docker macvlan网络
  • 2 基于macvlan网络创建容器
  • 3 创建macvlan bridge
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档