在Docker中自定义网络配置,实现容器与主机的连通性

这篇具有很好参考价值的文章主要介绍了在Docker中自定义网络配置,实现容器与主机的连通性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Docker中自定义网络配置,实现容器与主机的连通性

【实验步骤】

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33

ONBOOT=yes

[root@localhost ~]# systemctl restart network

[root@localhost ~]# mkdir /opt/centos -p  

[root@localhost ~]# mount /dev/cdrom /opt/centos/

mount: /dev/sr0 is write-protected, mounting read-only

[root@localhost ~]# cd /opt/

[root@localhost opt]# ls -l      \\查看是否有以下文件centos,Packages.tar.gz ,postgres.tar

total 472742

drwxrwxr-x. 8 root root      2048 Nov 26  2018 centos

-rw-r--r--. 1 root root 108512388 Jun  2 17:51 Packages.tar.gz

-rw-r--r--. 1 root root 375567360 Jun  2 17:52 postgres.tar

[root@localhost opt]# tar -zxvf Packages.tar.gz

[root@localhost opt]# ls -l

total 472758

drwxrwxr-x. 8 root root      2048 Nov 26  2018 centos

drwxr-xr-x. 3 root root     12288 Mar  8  2020 Packages

-rw-r--r--. 1 root root 108512388 Jun  2 17:51 Packages.tar.gz

-rw-r--r--. 1 root root 375567360 Jun  2 17:52 postgres.tar

[root@localhost opt]#

[root@localhost opt]# vi /etc/yum.repos.d/CentOS-Base.repo 

[centos]

name=centos

baseurl=file:///opt/centos

gpgcheck=0

enabled=1

[Packages]

name=Packages

baseurl=file:///opt/Packages

gpgcheck=0

enabled=1

使用yum安装docker容器

[root@localhost opt]#  yum -y install docker-io

启动docker容器服务

[root@localhost opt]# systemctl start docker

查看当前docker状态

[root@localhost opt]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

上传一个镜像 postgres.tar

将镜像上传docker容器

[root@localhost opt]# docker load -i postgres.tar

再次查看当前docker状态

[root@localhost opt]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

training/postgres   latest              1ca72400eeb5        9 years ago         364.6 MB

[root@localhost opt]#

用户使用--net=none后,可以自行配置网络,让容器达到跟平常一样具有访问网络的权限。通过这个过程,可以了解Docker配置网络的细节。

1 首先,启动一个/bin/bash容器,指定--net=none参数。

[root@localhost opt]# docker run -i -t --rm --net=none  training/postgres  /bin/bash

root@7792787a5b3b:/#

2 重新打开一个远程连接在本地主机查找容器的进程id,并为它创建网络命名空间。

 [root@localhost ~]# docker ps -a    //用于查找docker容器的name

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

7792787a5b3b        training/postgres   "/bin/bash"         43 seconds ago      Up 42 seconds                           jolly_pike

[root@localhost ~]# docker inspect -f '{{.State.Pid}}' 7792787a5b3b

2559

[root@localhost ~]# pid=2559

[root@localhost ~]# mkdir -p /var/run/netns

[root@localhost ~]# ln -s /proc/$pid/ns/net /var/run/netns/$pid

3 检查桥接网卡的IP和子网掩码信息。

[root@localhost ~]# ip addr show docker0

4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000

    link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff

    inet 172.17.42.1/16 scope global docker0

       valid_lft forever preferred_lft forever

[root@localhost ~]#

4 创建一对veth pair接口A和B,绑定A到网桥docker0,并启用它。

[root@localhost ~]# ip link add A type veth peer name B

[root@localhost ~]#  brctl addif docker0 A

[root@localhost ~]# ip link set A up

[root@localhost ~]# ip  add

…….

5: B@A: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000

    link/ether 4a:20:7f:7e:72:98 brd ff:ff:ff:ff:ff:ff

6: A@B: <NO-CARRIER,BROADCAST,MULTICAST,UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 state LOWERLAYERDOWN group default qlen 1000

    link/ether 2a:dd:f7:26:8d:12 brd ff:ff:ff:ff:ff:ff

[root@localhost ~]#

查看到A@B当前的状态是UP

5 将B放到容器的网络命名空间,命名为eth0,启动它并配置一个可用IP(桥接网段)和默认网关。

[root@localhost ~]#  ip link set B netns $pid

[root@localhost ~]# ip netns exec $pid ip link set dev B name eth0

[root@localhost ~]# ip netns exec $pid ip link set eth0 up

[root@localhost ~]#  ip netns exec $pid ip addr add 172.17.42.99/16 dev eth0

[root@localhost ~]# ip netns exec $pid ip route add default via 172.17.42.1

[root@localhost ~]#

以上,就是Docker配置网络的具体过程。

查看更改后的容器IP。

root@7792787a5b3b:/# ip add

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

5: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

    link/ether 4a:20:7f:7e:72:98 brd ff:ff:ff:ff:ff:ff

    inet 172.17.42.99/16 scope global eth0

       valid_lft forever preferred_lft forever

    inet6 fe80::4820:7fff:fe7e:7298/64 scope link

       valid_lft forever preferred_lft forever

root@7792787a5b3b:/#

测试连通性

root@7792787a5b3b:/# ping -c 4 192.168.50.128

PING 192.168.50.128 (192.168.50.128) 56(84) bytes of data.

64 bytes from 192.168.50.128: icmp_seq=1 ttl=64 time=0.315 ms

64 bytes from 192.168.50.128: icmp_seq=2 ttl=64 time=0.081 ms

64 bytes from 192.168.50.128: icmp_seq=3 ttl=64 time=0.080 ms

64 bytes from 192.168.50.128: icmp_seq=4 ttl=64 time=0.164 ms

--- 192.168.50.128 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3001ms

rtt min/avg/max/mdev = 0.080/0.160/0.315/0.095 ms

root@7792787a5b3b:/#

[root@localhost ~]# ping -c 4 172.17.42.99

PING 172.17.42.99 (172.17.42.99) 56(84) bytes of data.

64 bytes from 172.17.42.99: icmp_seq=1 ttl=64 time=0.326 ms

64 bytes from 172.17.42.99: icmp_seq=2 ttl=64 time=0.073 ms

64 bytes from 172.17.42.99: icmp_seq=3 ttl=64 time=0.070 ms

64 bytes from 172.17.42.99: icmp_seq=4 ttl=64 time=0.072 ms

--- 172.17.42.99 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3000ms

rtt min/avg/max/mdev = 0.070/0.135/0.326/0.110 ms

[root@localhost ~]#

【步骤解释】

  • 在编辑器中打开 /etc/sysconfig/network-scripts/ifcfg-ens33 文件,并将 ONBOOT 参数设置为 yes。这样可以在启动时自动激活网络接口。
  • 使用 systemctl restart network 命令重启网络服务,以使更改生效。
  • 创建一个目录 /opt/centos,并将光盘设备 /dev/cdrom 挂载到该目录下。如果光盘是只读的,会显示 "mount: /dev/sr0 is write-protected, mounting read-only"。
  • 进入 /opt/ 目录,使用 ls -l 命令查看是否存在以下文件:centos、Packages.tar.gz、postgres.tar。
  • 使用 tar -zxvf Packages.tar.gz 命令解压 Packages.tar.gz 文件。
  • 编辑 /etc/yum.repos.d/CentOS-Base.repo 文件,在文件中添加一个名为 centos 的仓库,其 baseurl 设置为 file:///opt/centos,同时将 enabled 参数设置为 1。
  • 使用 yum -y install docker-io 命令安装 Docker 容器。
  • 使用 systemctl start docker 命令启动 Docker 服务。
  • 使用 docker images 命令查看当前可用的 Docker 镜像。
  • 使用 docker load -i postgres.tar 命令将 postgres.tar 镜像加载到 Docker 容器中。
  • 再次使用 docker images 命令确认镜像加载成功。
  • 使用 docker run -i -t --rm --net=none training/postgres /bin/bash 命令启动一个名为 training/postgres 的容器,并指定 --net=none 参数以便自行配置网络。
  • 在本地主机上打开一个新的终端连接,并使用 docker ps -a 命令查找容器的进程 ID(CONTAINER ID)。
  • 使用 docker inspect -f '{{.State.Pid}}' <CONTAINER ID> 命令获取容器的进程 ID(PID)。
  • 创建一个网络命名空间,将容器的网络命名空间链接到本地主机的 /var/run/netns 目录。
  • 使用 ip addr show docker0 命令检查桥接网卡 docker0 的 IP 地址和子网掩码信息。
  • 创建一对 veth 接口 A 和 B,将接口 A 绑定到桥接网卡 docker0 上,并启用它。
  • 将接口 B 移动到容器的网络命名空间中,并将其重命名为 eth0,然后启用接口 eth0 并为其配置一个可用的 IP 地址(在桥接网段中)和默认网关。
  • 使用 ip add 命令检查更改后容器中的 IP 地址。
  • 进行连通性测试,使用 ping 命令测试容器和本地主机之间的连通性。

通过这个实验,您可以了解到在Docker中如何配置网络,并自行配置容器的网络连接,使其具有访问网络的权限。文章来源地址https://www.toymoban.com/news/detail-473285.html

到了这里,关于在Docker中自定义网络配置,实现容器与主机的连通性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 进阶Docker4:网桥模式、主机模式与自定义网络

    目录  网络相关 子网掩码 网关 规则 docke网络配置 bridge模式 host模式 创建自定义网络(自定义IP) IP 子网掩码 网关 DNS 端口号 子网掩码 互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。 IP 地址在设计时就考虑到地址分配的层次特点

    2024年01月19日
    浏览(37)
  • 配置Docker OpenWrt与宿主机网络互通且作为宿主机网关

    最近需要用Docker版的Openwrt作为旁路由(网关),在配置过程中遇到一些问题,通过查阅资料,最终完美解决。现在将整体方案和具体操作步骤贴到这里分享给大家 这里我使用的环境如下: 宿主机操作系统:Armbian 宿主机ip:192.168.5.2 宿主机新macvlan接口ip:192.168.5.3 Docker镜像:

    2024年02月03日
    浏览(98)
  • docker-compose 网络配置- IP 主机名 hosts配置

    配置IP 配置 主机名 配置hosts 下面的配置可以修改/etc/hosts文件: 追加 zk 172.2.0.101 、 kf 172.2.0.102 配置完成进入容器,可查看验证 完整例子 创建一个网络 配置 单节点kafka、zookeeper,kafka通过主机名 访问zookeeper 3 验证

    2024年02月07日
    浏览(41)
  • 新手小白安装aio小主机布置家庭网络-4-proxmox-ve安装LXC、pve创建ct容器安装docker。

    PVE是使用Debian系统作为底层。我们创建Debian LXC容器。 下载Debian11DE  ct模板 创建CT,一定把无特权容器前面的勾去掉。我们需要一个特权的容器。勾选嵌套。完成后不要启动! 。 开启ct102容器前,进入pve shell 设置ct102容器设置 添加代码 ctrl+x保存配置,y确认,回车。

    2024年02月15日
    浏览(48)
  • 分享从零开始学习网络设备配置--任务3.7 使用动态路由RIPv2实现网络连通

    任务描述 某公司随着规模的不断扩大,路由器的数量开始有所增加。网络管理员发现原有的静态路由已经不适合现在的公司,实施动态路由RIPv2协议配置,实现网络中所有主机之间互相通信。   在路由器较多的网络环境中,手工配置静态路由会给管理人员带来很大的工作负担

    2024年02月06日
    浏览(48)
  • docker网络配置固定容器ip

    如果不固定ip,每次启动时,docker会动态给容器分配ip,有些时候会造成影响。 1)创建自定义docker内部网络 docker network 官方文档 (看不懂可用浏览器翻译):https://docs.docker.com/engine/reference/commandline/network_create/ –subnet:指定网段的 CIDR 格式的子网 其中 172.172.0.0/16 表示子网范

    2024年02月15日
    浏览(37)
  • Docker学习:容器五种(3+2)网络模式 | bridge模式 | host模式 | none模式 | container 模式 | 自定义网络模式详解

    本讲是从Docker系列讲解课程,单独抽离出来的一个小节,重点介绍 容器网络模式 , 属于了解范畴,充分了容器的网络模式, 更有助于更好的理解Docker的容器之间的访问逻辑 。 疑问: 为什么要了解容器的网络模式? 首先, 容器之间 虽然不是物理隔离,但是它们彼此之间

    2024年02月09日
    浏览(43)
  • 【云原生】Docker网络Overlay搭建Consul实现跨主机通信

    目录 1.overlay网络是什么? 实现overlay环境 1.overlay网络是什么?         在Docker中,Overlay网络是一种容器网络驱动程序,它允许在多个Docker主机上创建一个虚拟网络,使得容器可以通过这个网络相互通信。         Overlay网络使用VXLAN(Virtual Extensible LAN)技术来实现多主

    2024年02月14日
    浏览(41)
  • Docker】容器里面拷文件到宿主机[或]宿主机拷文件到容器里面

    【Docker】容器里面拷文件到宿主机[或]宿主机拷文件到容器里面 - 知乎 答:在宿主机里面执行以下命令 docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径 示例: 假设容器名为webnphp,要从容器里面拷贝的文件路为: 现在要将tox.ini从容器里面拷到宿主

    2024年02月06日
    浏览(62)
  • 【Java】微服务——Docker容器部署(docker安装,docker配置镜像加速,DockerHub,docker基本操作,Dockerfile自定义镜像.Docker-Compose)

    微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题 1.1.1.应用部署的环境问题 大型项目组件较多,运

    2024年02月04日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包