docker网络配置

2023-05-16

开放容器端口

执行docker run的时候有个-p选项,可以将容器中的应用端口映射到宿主机中,从而实现让外部主机可以通过访问宿主机的某端口来访问容器内应用的目的。
-p选项能够使用多次,其所能够暴露的端口必须是容器确实在监听的端口。
-p选项的使用格式:

  • -p
    • 将指定的容器端口映射至主机所有地址的一个动态端口
  • -p :
    • 将容器端口映射至指定的主机端口
  • -p ::
    • 将指定的容器端口映射至主机指定的动态端口
  • -p ::
    • 将指定的容器端口映射至主机指定的端口

动态端口指的是随机端口,具体的映射结果可使用docker port命令查看。

[root@localhost ~]# docker run -itd -p 80 busybox
a71a96e98b5e2ff3c68ba535658fa3d61a2fe147bccb48d74cdbf8d070c8b6f2
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS                                     NAMES
a71a96e98b5e   busybox   "sh"      4 seconds ago   Up 3 seconds   0.0.0.0:49155->80/tcp, :::49155->80/tcp   frosty_beaver
[root@localhost ~]# ss -anlt
State     Recv-Q    Send-Q       Local Address:Port          Peer Address:Port    Process    
LISTEN    0         128                0.0.0.0:22                 0.0.0.0:*                  
LISTEN    0         128                0.0.0.0:49155              0.0.0.0:*                  
LISTEN    0         128                   [::]:22                    [::]:*                  
LISTEN    0         128                   [::]:49155                 [::]:*                  
[root@localhost ~]# docker port a71a96e98b5e
80/tcp -> 0.0.0.0:49155
80/tcp -> :::49155
[root@localhost ~]# 

由此可见,容器的80端口被暴露到了宿主机的49155端口上,此时我们访问一下这个端口看是否能访问到容器内的站点
在这里插入图片描述

iptables防火墙规则将随容器的创建自动生成,随容器的删除自动删除规则。
将容器端口映射到指定IP的随机端口

[root@localhost ~]# docker run -itd -p 192.168.141.135::80 httpd
ac24345517ffb80a469dc9022c1e86718665992a7825bf03409a502ba7cfa1ab
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS                           NAMES
ac24345517ff   httpd     "httpd-foreground"   23 seconds ago   Up 23 seconds   192.168.141.135:49153->80/tcp   youthful_keller

在另一个终端上查看端口映射情况

[root@localhost ~]# docker port ac24345517ff
80/tcp -> 192.168.141.135:49153
[root@localhost ~]# 

将容器端口映射到宿主机的指定端口

[root@localhost ~]# docker run -itd --name b2 --rm -p 80:80 nginx
61597ab1e7d1ab568db6b5121b5168cfd84cb01fabf9dafba900deedcc99a803

在另一个终端上查看端口映射情况

[root@localhost ~]# docker port b2 
80/tcp -> 0.0.0.0:80
80/tcp -> :::80
[root@localhost ~]# 

自定义docker0桥的网络属性信息

官方文档相关配置
自定义docker0桥的网络属性信息需要修改/etc/docker/daemon.json配置文件

{
    "bip": "192.168.1.5/24",
    "fixed-cidr": "192.168.1.5/25",
    "fixed-cidr-v6": "2001:db8::/64",
    "mtu": 1500,
    "default-gateway": "10.20.1.1",
    "default-gateway-v6": "2001:db8:abcd::89",
    "dns": ["10.20.1.2","10.20.1.3"]
}

#上面是列子
{
  "registry-mirrors": ["https://cns3xv60.mirror.aliyuncs.com"],
  "bip": "192.168.135.1/24"
}
[root@localhost ~]# vim /etc/docker/daemon.json
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:ae:b0:ec brd ff:ff:ff:ff:ff:ff
    inet 192.168.141.135/24 brd 192.168.141.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::b2dd:4066:a098:25d1/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:16:70:a5:46 brd ff:ff:ff:ff:ff:ff
    inet 192.168.135.1/24 brd 192.168.135.255 scope global docker0
       valid_lft forever preferred_lft forever
[root@localhost ~]# 

核心选项为bip,即bridge ip之意,用于指定docker0桥自身的IP地址;其它选项可通过此地址计算得出。

docker创建自定义桥

创建一个额外的自定义桥,区别于docker0

[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
9e3a71f10307   bridge    bridge    local
66047d5040c1   host      host      local
d1e9a6d46b69   none      null      local

[root@localhost ~]# docker network create -d bridge --subnet "192.168.157.0/24" --gateway "192.168.157.1" br0
2298df7f824a5e2be861a8bdc3a74145eda6ff1587081b3a25ee2ca69c3cbca1
[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
2298df7f824a   br0       bridge    local
9e3a71f10307   bridge    bridge    local
66047d5040c1   host      host      local
d1e9a6d46b69   none      null      local
[root@localhost ~]# 

使用新创建的自定义桥来创建容器:

[root@localhost ~]# docker run -it --name b2 --rm --network br0 busybox
/ # ifconfig 
eth0      Link encap:Ethernet  HWaddr 02:42:C0:A8:9D:02  
          inet addr:192.168.157.2  Bcast:192.168.157.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:962 (962.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/ # 

再创建一个容器,使用默认的bridge桥:

[root@localhost ~]# docker run -it --name b1 --rm  busybox
/ # ifconfig 
eth0      Link encap:Ethernet  HWaddr 02:42:C0:A8:87:02  
          inet addr:192.168.135.2  Bcast:192.168.135.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:962 (962.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/ # 

试想一下,此时的b2与b1能否互相通信?如果不能该如何实现通信?
b1和b2不相互通信,因为不是相同的网关,如果想实现通信需要搭建网桥

#搭建通道
[root@localhost ~]# docker network connect br0 c91feb46889f

#b1可以ping b2
/ # hostname 
c91feb46889f
[root@localhost ~]# docker run -it --name b1 --rm  busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
7: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:c0:a8:87:02 brd ff:ff:ff:ff:ff:ff
    inet 192.168.135.2/24 brd 192.168.135.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # ping 192.168.157.2
PING 192.168.157.2 (192.168.157.2): 56 data bytes
64 bytes from 192.168.157.2: seq=0 ttl=64 time=0.079 ms
64 bytes from 192.168.157.2: seq=1 ttl=64 time=0.085 ms
^C
--- 192.168.157.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.079/0.082/0.085 ms
/ # 

#b2无法ping b1
[root@localhost ~]# docker run -it --name b2 --rm --network br0 busybox
/ # hostname 
79a3ae835a1c
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:c0:a8:9d:02 brd ff:ff:ff:ff:ff:ff
    inet 192.168.157.2/24 brd 192.168.157.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # ping 192.168.135.2
PING 192.168.135.2 (192.168.135.2): 56 data bytes
^C
--- 192.168.135.2 ping statistics ---

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker网络配置 的相关文章

  • 2023-03-12 java 子类对父类所拥有的方法的重命名

    例如 xff1a person 里面有个Id方法 public void Id System out println 34 身份证号 xff1a 34 43 id student引用person类 xff0c 现在我们在student里面改
  • Ubuntu2204LTS基础操作详解

    废话不多 说上干货 Ubuntu2204LTS下载链接 xff1a https ubuntu com download 默认使用root用户操作 或者命令前边加 sudo 关闭图形界面 关闭图形界面 xff0c 启用tty终端登录的方法如下
  • 解决Xamarin开发Android项目时的"Could not create the Java Virtual Machine"错误

    如题 xff0c 笔者在编辑Main axml界面时出现 34 Could not create the Java Virtual Machine 34 错误 xff0c 可按以下步骤解决 xff1a 1 运行注册表编辑器 xff1a 开始
  • Centos 7 虚拟机ifconfig或ip addr时,ens33不显示inet地址(已设置NOBOOT为yes)

    在虚拟机中输入ifconfig或ip addr时 xff0c 出现如下情况 xff1a sudo dhclient ens33 sudo ifconfig ens33 依次执行上面两行 xff0c 之后发现ens33中可以显示inet了 本
  • 7---整数反转

    给你一个 32 位的有符号整数 x x x xff0c 返回将 x x x 中的数字部分反转后的结果 如果反转后整数超过 32 位的有符号整数的范围
  • 使用windows远程连接kali的桌面

    使用windows远程连接kali的桌面 kali操作系统需要做的一些配置 安装xrdp span class token function apt span span class token parameter variable y sp
  • Android Studio模拟器出错无法运行的解决办法

    之前在运行Android Studio项目的时候 xff0c 原本用的是AS上安装过的模拟器 xff0c 然后我中途又把夜神模拟器打开也运行了一下 结果当我再次使用AS上的模拟器时 xff0c 模拟器上总是出现一个白色弹窗 xff0c 里面
  • Spring框架

    目录 一 Spring概述 二 Spring入门程序 xff08 理解控制反转IoC xff09 三 依赖注入 xff08 Dependency Injection xff0c DI xff09 3 1 依赖注入的实现方式 一 Spring
  • statement和PreparedStatement的区别

    学习总结转载 xff0c 有改动 xff0c 建议移步原作者 版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https bl
  • Spring环境的搭建和简单使用

    一 为什么使用spring和什么spring 1 xff09 代码中对象间的以来关系特别多 xff0c 代码耦合度比较高 xff0c 为了解决这种问题 xff0c 使用spring框架 2 xff09 spring是一个开源的容器框架 xf
  • Java中&与&&的区别

    Java中 amp 和 amp amp 都是逻辑与 xff0c 需要左右两边同时满足条件才可以得到true的结果 但是 xff0c 它们之间也有区别 xff1a 1 amp amp 也叫短路与 xff0c 当 amp amp 左边的条件不满
  • 关于二叉树的建立(C语言)(链式)

    首先 xff0c 我们得知道二叉树是什么 xff01 xff01 这东西网上一大把 还有 xff0c 二叉树的遍历顺序 xff0c 前序 xff08 根左右 xff09 xff0c 中序 xff08 左根右 xff09 xff0c 后序 x
  • [springMVC学习]1、springmvc设置spring配置文件

    我们给springmvc设置配置文件 xff0c 实际上就是让某个类在tomcat启动时 xff0c 自动的去读取配置文件 xff0c 完成ioc容器的创建 xff0c 完成初始化工作 在spring中 xff0c 我们是手动new出来 x
  • 无法连接 MKS: Login(username/password)incorrect

    升级到Vmware Workstation 12之后 xff0c 客户端能连上虚拟机服务器 xff0c 但却打不开共享的虚拟机 xff0c 提示报错 无法连接 MKS Login username password incorrect 查了
  • 李永乐(一)行列式计算——笔记

    行列式基本性质 一 行列式求值 说明 xff1a 第 i 行元素 乘 第 j 列的代数余子式 之和 61 0 二 转置行列式值不变 引申 xff1a 行有什么性质 xff0c 列就有什么性质 三 两行互换 xff0c 行列式值变号 引申 x
  • 计算机网络——组播地址(多播地址、D类地址)详解——不断完善更新中

    1 是什么 先看这张图 xff0c 组播地址是分类编址的IPv4地址中的D类地址 xff0c 又叫多播地址 xff0c 他的前四位必须是1110 xff0c 所以网络地址的取值范围是224 239 2 这些IP地址用来做什么 224 0 0
  • 线代——猴博士笔记

    求向量组的秩 xff0c 先求极大无关组 xff0c 极大无关组里几个向量 xff0c 秩就是几 什么是极大无关组 xff1f 从一向量组挑出几个向量 xff0c 他们线性无关 xff0c 且原来向量组中任意一个向量加进去 xff0c 又变
  • C++ std::ref————详解

    想学习ref xff0c 必须先学习reference rapper 1 是什么 xff1f ref是个函数模板 xff1a 用来构建一个reference wrapper对象并返回 xff0c 该对象拥有传入的elem变量的引用 如果参数
  • I/O复用的高级应用:聊天室程序———实例代码

    1概述 这是一个聊天室程序 xff0c 分为服务端和客户端两部分 多个客户端可以连接到同一个服务器 xff0c 当一个客户端向服务器发送消息时 xff0c 该消息会被转发给除发送端外的其他客户端 xff0c 其他客户端收到该消息并输出到标准
  • CMake指令解析 set(CMAKE_CXX_FLAGS “$ENV{CXXFLAGS} -rdynamic -O3 -fPIC -ggdb -std=c++11 -Wall -Wno-deprec

    完整代码 set span class token punctuation span CMAKE CXX FLAGS span class token string 34 span class token variable ENV span

随机推荐

  • vscode找不到头文件报错,就离谱

    最近在vscode写一个项目 xff0c 进行编译测试的时候发现死活找不到头文件 xff0c 就离谱 xff0c CMakeLists txt里的include directories所有头文件包含路径写的明明白白清清楚楚 xff0c 就是
  • 有26个字母a~z,找出所有字母组合,a、b、c、ab、abc、a~z 都是一个组合(顺序无关)

    mark 一下 xff0c 好像是用深搜做的 xff0c 目前看不太懂 span class token keyword int span list span class token punctuation span span class
  • 对顶堆模板:求动态数组的中位数

    模板 priority queue span class token operator lt span span class token keyword int span span class token operator gt span
  • C++八股文

    文章目录 C 43 43 语言int function int a int b 指针数组和数组指针的区别 xff1f 数组指针指针数组 函数指针和指针函数的区别函数指针指针函数 常量指针和指针常量的区别数组和指针的区别指针和引用的区别数组名
  • 一个HTML网页简单有效的验证码更换方法

    代码展示 lt img name 61 34 verifycode 34 src 61 34 verifyServlet 34 height 61 34 40px 34 width 61 34 150px 34 onclick 61 34
  • 获取CSDN文章内容并转换为markdown文本的python

    这篇文章主要介绍了自己写的小工具 xff0c 可以直接获取csdn文章并转换为markdown格式 需要的朋友可以参考下 自己写的小工具 xff0c 可以直接获取csdn文章并转换为markdown格式 效果图 核心代码 span clas
  • Android-视图绑定

    举例 xff1a 此时 xff0c first layout xml中定义了一个button且id为button1的按钮 在FirstActivity中我们想要调用这个按钮的话 xff0c 有两种方法 第一种 xff0c 通过FindVie
  • C语言程序设计1

    C语言程序设计1 计算机语言分类 xff1a 机器语言 xff1a xff08 machine language xff09 计算机直接使用的二进制形式的程序语言或机器代码 汇编语言 xff1a 借助助记符进行描述的计算机语言 高级语言 x
  • ZYNQ中的GPIO与AXI GPIO

    GPIO GPIO 一种外设 xff0c 对器件进行观测和控制MIO 将来自PS外设和静态存储器接口的访问多路复用到PS引脚上处理器控制外设的方法 通过一组寄存器包括状态寄存器和控制寄存器 xff0c 这些寄存器都是有地址的 xff0c 通
  • FTP文件传输协议

    简介 FTP协议 xff1a 文件传输协议 xff08 File Transfer Protocol xff09 协议定义了一个在远程计算机系统和本地计算机系统之间传输文件的一个标准FTP运行在OSI模型的应用层 xff0c 并利用传输协议
  • python中如何用for循环语句1加到100?

    计算机是现代一种用于高速计算的电子计算机器 xff0c 是一种高级的计算工具 可以进行数值计算 xff0c 又可以进行逻辑计算 xff0c 还具有存储记忆功能 是能够按照程序运行 xff0c 自动 高速处理海量数据的现代化智能电子设备 计算
  • controller层配置全局配置拦截器

    大家好 xff0c 我是一名在算法之路上不断前进的小小程序猿 xff01 体会算法之美 xff0c 领悟算法的智慧 希望各位博友走过路过可以给我点个免费的赞 xff0c 你们的支持是我不断前进的动力 xff01 xff01 加油吧 xff0
  • 用python写DFS和BFS算法

    前言 xff1a 菜鸟学算法 加油 xff01 一 什么是DFS和BFS xff1f 1 BFS算法 xff1a 宽度优先搜索算法 xff08 又称广度优先搜索 xff09 是最简便的图的搜索算法之一 xff0c 这一算法也是很多重要的图的
  • 进程同步 生产者消费者问题

    题目 xff1a 某超级市场 xff0c 可容纳100人同时购物 入口处备有篮子 xff0c 每个购物者可持一只篮子入内购物 出口处结帐 xff0c 并归还篮子 xff08 出 入口仅容一人通过 xff09 请试用P xff08 S xff
  • Windows-取消锁屏密码

    开始 gt 设置 gt 账户 gt 登录选项 gt 密码 gt 输入当前密码 gt 更改密码 xff08 默认为空就行 xff09 gt 下一步 gt 完成
  • 腾讯云4核服务器和2核区别大吗?性能差异

    腾讯云服务器2核和4核性能有什么区别 xff1f 云服务器核数指的是vCPU处理器 xff0c 云服务器CPU核心数如何选择主要取决于用户实际应用情况 xff0c 如果当前应用对CPU计算能力要求不高 xff0c 2核完全可以胜任 xff0
  • 最详细的手工LAMP环境搭建

    环境 xff1a 阿里云服务器ECS xff0c Alibaba Cloud Linux 3 2104 LTS 64位 xff0c 2核 vCPU 2 GiB LAMP 是搭建Web应用时最常用的环境 xff0c LAMP 分别表示 Lin
  • python 语音播报 简单入门

    coding utf 8 import pyttsx3 import time 初始化 pt 61 pyttsx3 init 说什么 pt say 34 你好 xff0c dbirder 34 开始说吧 pt runAndWait time
  • 【optimizer详解】

    optimizer 定义 optimizer就是在深度学习反向传播过程中 xff0c 指引损失函数 xff08 目标函数 xff09 的各个参数往正确的方向更新合适的大小 xff0c 使得更新后的各个参数让损失函数 xff08 目标函数 x
  • docker网络配置

    开放容器端口 执行docker run的时候有个 p选项 xff0c 可以将容器中的应用端口映射到宿主机中 xff0c 从而实现让外部主机可以通过访问宿主机的某端口来访问容器内应用的目的 p选项能够使用多次 xff0c 其所能够暴露的端口必