国产openeuler22.03容器环境下固定容器IP的实例

news2024/11/18 3:45:34

Docker 中默认的容器网络为名为bridge的桥接网络,使用DHCP协议,不能固定容器IP,每次重启,容器的IP是按其启动顺序来分配的,单宿主机多容器时,容器的IP就会发生变化,不利于程序 连接及安全加固配置,本文探讨如何在国产openeuler22.03下让单宿主机多容器的场景下容器内启用固定IP。

1、创建一个自定义的网络

[root@localhost ~]# docker network create --subnet=172.18.0.0/24 snet
6cc2fbec437ba86d0b80bd6a606b1a8d9b46d4f9f3f76826f20efa2adff6bd1a
[root@localhost ~]# docker network list
NETWORK ID          NAME                DRIVER              SCOPE
a3e22572b920        bridge              bridge              local
57fa83f87a13        host                host                local
0b547c045c50        none                null                local
6cc2fbec437b        snet                bridge              local

6cc2fbec437b即为新建的容器网络。命令行中--subnet 参数指定了子网及其掩码为 172.18.0.0/24,可以根据情况调整。snet 是网络名称,可以自定义。

[root@localhost ~]# ip addr
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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:35:f3:4f brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.80.132/24 brd 192.168.80.255 scope global dynamic noprefixroute ens33
       valid_lft 1357sec preferred_lft 1357sec
    inet6 fe80::95f:f5d0:b846:15a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: br-58c446696111: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:96:5b:d7:b1 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/24 brd 172.18.0.255 scope global br-58c446696111
       valid_lft forever preferred_lft forever
    inet6 fe80::42:96ff:fe5b:d7b1/64 scope link 
       valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:7c:d2:21:88 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
...

 ip addr指令可以看到宿主机上自动启用了地址为172.18.0.1/24的桥接网关。

2、修改docker的配置文件,避免服务器重启后自定义网络丢失

修改docker的配置文件,屏蔽daemon掉电重启时清理docker的db文件功能,避免服务器重启后自定义网络丢失。此段参考:网友hotcoffie写的文章【《全网唯一》解决华为OpenEuler 22.03LTS重启后,docker丢失自定义网络,docker-compose报错: network not found】

和华为官方文档描述:

 执行:

[root@localhost ~]# echo "DISABLE_CRASH_FILES_DELETE=true" >>/etc/sysconfig/docker
[root@localhost ~]# cat /etc/sysconfig/docker
# /etc/sysconfig/docker

# Modify these options if you want to change the way the docker daemon runs
OPTIONS='--live-restore'

DOCKER_CERT_PATH=/etc/docker

# If you have a registry secured with https but do not have proper certs
# distributed, you can tell docker to not look for full authorization by
# adding the registry to the INSECURE_REGISTRY line and uncommenting it.
# INSECURE_REGISTRY='--insecure-registry'

# Location used for temporary files, such as those created by
# docker load and build operations. Default is /var/lib/docker/tmp
# Can be overridden by setting the following environment variable.

DISABLE_CRASH_FILES_DELETE=true

 请重启服务器,确认自定义网络snet 没有丢失。

3、启动容器时指定固定 IP

可以在 docker run 命令中使用 --ip 参数指定容器的 IP 地址,并关联到自定义网络,例如:

[root@localhost ~]# docker run --name sftpsrv --ip=172.18.0.2 --network=snet --restart=always -p 4434:22 -d atmoz/sftp:debian-stretch sftp:1111:1111
4b5b4a2c06f260b341449209a1913ec9d2dfb1ef2a48efb4182af80ac93d818b
[root@localhost ~]# docker run --name sftpsrv2 --ip=172.18.0.3 --network=snet --restart=always -p 4435:22 -d atmoz/sftp:debian-stretch sftp:1111:1111  
94795b86366a7fd234fd7a7ac996a72e50e8d1e319dafa17c521b810a5c7b565
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                  NAMES
94795b86366a        atmoz/sftp:debian-stretch   "/entrypoint sftp:11…"   4 seconds ago       Up 3 seconds        0.0.0.0:4435->22/tcp   sftpsrv2
4b5b4a2c06f2        atmoz/sftp:debian-stretch   "/entrypoint sftp:11…"   24 seconds ago      Up 22 seconds       0.0.0.0:4434->22/tcp   sftpsrv

其中,--name 指定容器的名称,--ip 指定容器的 IP 地址,--network 指定容器连接到的网络,-d 指定容器在后台运行,atmoz/sftp:debian-stretch是本次测试用镜像名称。

注意,指定固定 IP 的容器需连接到相应的自定义网络中。同时,需要确保指定的 IP 地址在子网范围内,而且没有被其他容器或主机使用。

如果在 Docker Compose 中,也可使用 ipv4_address 关键字来指定容器的固定 IP 地址。例如:

version: '3'

services:
  sftpsrv:
    image: atmoz/sftp:debian-stretch
    networks:
      snet:
        ipv4_address: 172.18.0.2
    ports:
      - "4434:22"
    restart: always
    command: sftp:1111:111

networks:
  snet:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/24

 测试业务运行情况

[root@localhost ~]# telnet 192.168.80.132 4434
Trying 192.168.80.132...
Connected to 192.168.80.132.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u4

Protocol mismatch.
Connection closed by foreign host.
[root@localhost ~]# telnet 192.168.80.132 4435
Trying 192.168.80.132...
Connected to 192.168.80.132.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u4

Protocol mismatch.
Connection closed by foreign host.
[root@localhost ~]# 

 可见业务运行正常。

4、重启容器进行验证,看分配的固定IP是否有变化。

[root@localhost ~]# systemctl restart docker
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                  NAMES
94795b86366a        atmoz/sftp:debian-stretch   "/entrypoint sftp:11…"   About an hour ago   Up 40 minutes       0.0.0.0:4435->22/tcp   sftpsrv2
4b5b4a2c06f2        atmoz/sftp:debian-stretch   "/entrypoint sftp:11…"   About an hour ago   Up 40 minutes       0.0.0.0:4434->22/tcp   sftpsrv
[root@localhost ~]# docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' `docker ps -qa`
172.18.0.3
172.18.0.2

可见容器的IP在重启后不会再发生变化了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/636377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ada Tutorial(1):Ada基础——wordcount程序

文章目录 Ada 常用的库和方法Ada.Characters.Handling字符类型函数转换函数 Ada 基础语法概览数据类型和子类型类型&#xff08;Type&#xff09;子类型&#xff08;Subtype&#xff09;类型和子类型的区别常用类型转换方法显示类型转换类型相关函数 循环语句无条件循环 (Loop)…

探索智慧档案的发展路径,开源网安受邀参加国际档案日专题讲座

近日&#xff0c;深圳市档案学会举办了“奋进新征程&#xff0c;兰台谱新篇”2023年国际档案日专题讲座。开源网安常务副总经理王颉博士受邀参加此次讲座&#xff0c;分享了《档案信息安全实务&#xff1a;时代与展望》&#xff0c;从软件供应链安全的维度为到场人员讲解了数字…

Vue3 ElementPlus Dialog封装 (一:使用props emit)

引言 多个页面中需要录入用户数据&#xff08;弹窗内容相同&#xff09;&#xff0c;重复写弹窗代码比较繁琐。因此封装一下组件&#xff0c;使用效果如下&#xff1a; 本例中模型较简单&#xff0c;记录下使用方法和原理 实现原理 参考VUE官方两个例子&#xff0c;基本父子件…

调试CAN过滤器功能使用笔记

一.关于CAN过滤器的配置及使用 提示&#xff1a;此处使用的是雅特力的芯片&#xff08;基本兼容stm32的芯片&#xff09; 这里只讲32位宽的过滤器&#xff0c;16位的用法基本相同&#xff0c;注意因为位数减少数据不一样。 1.1首先过滤器有两种工作模式&#xff1a; 1.标识符…

Rust每日一练(Leetday0025) 矩阵置零、搜索二维矩阵、颜色分类

目录 73. 矩阵置零 Set Matrix Zeroes &#x1f31f;&#x1f31f; 74. 搜索二维矩阵 Search A 2d-Matrix &#x1f31f;&#x1f31f; 75. 颜色分类 Sort Colors &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang…

逻辑回归与决策树回归

逻辑回归 逻辑回归函数: 逻辑回归分析属于概率型回归分析方法。 假设在自变量xi1、xi2…xip的作用下&#xff0c;因变量y取值为1和0的二值变量&#xff0c;其取值为1的概率为pi&#xff0c;则可以表示为&#xff1a; 相反&#xff0c;y取值为0的概率即&#xff1a; 对y取值为…

FlinkSql 使用总结

一、FlinkSQL底层实现理解 FlinkSQL在flink Framework的位置 Flink Table & SQL API是在DataStream和DataSet之上封装的一层高级API。由于DataStream和DataSet有各自的API&#xff0c;开发起来又有些困难&#xff0c;如果只是应对一些相对通用的需求会有点麻烦。而Flink T…

【AUTOSAR】UDS协议的代码分析与解读(一)----测试UDS协议DID的填写与读取

测试环境配置 Environment-1: Trace32配置&#xff08;内核选择&#xff09; Environment-2: Dgs上位机配置&#xff08;报文发送&#xff09; AV012 Dgs密码 &#xff1a;hsae_dgs 配置请求ID和响应ID可以去代码中查看&#xff0c;备注型号和设备类别&#xff0c;选择售后烧…

一款集成了多种老牌工具字典的轻量级目录扫描器

功能 dirxk&#xff0c;一款集成了多种老牌工具字典的轻量级目录扫描器&#xff0c;包括御剑后台扫描字典&#xff0c;test404网站备份&#xff0c;web破壳扫描器&#xff0c;御剑1.5扫描字典&#xff0c;御剑专业版字典&#xff0c;wwwscan字典&#xff0c;dirscan字典&#…

ceph块存储使用总结

ceph块存储使用总结 大纲 ceph osd pool池创建 & 更新osd pool关联应用删除ceph osd pool使用ceph块存储自动挂载扩容 本次测试相关环境与软件&#xff1a; ceph15.2.17 Octopuseph-deploy 2.0.1ubuntu18.04.6 ceph osd pool池 基础概念 Ceph 将数据存储在存储池中。…

Hive存储格式

hive的存储格式 hive的存储格式分为两大类&#xff1a;一类纯文本文件&#xff0c;一类是二进制文件存储。 第一类&#xff1a; 纯文本文件存储 textfile: 纯文本文件存储格式&#xff0c;不压缩&#xff0c;也是hive的默认存储格式&#xff0c;磁盘开销大&#xff0c;数据解…

3. 说说Java“锁“事

3.1 从轻松的乐观锁和悲观锁开讲 ● 悲观锁&#xff1a; 认为自己在使用数据的时候一定有别的线程来修改数据&#xff0c;因此在获取数据的时候会先加锁&#xff0c;确保数据不会被别的线程修改&#xff0c;synchronized和Lock的实现类都是悲观锁&#xff0c;适合写操作多的场…

WhaleHiking的“三山五岳”第一站:泰山

Datawhale团队 来源&#xff1a;whaleHiking 开场白 大家应该都听说过杜甫的《望岳》——“会当凌绝顶&#xff0c;一览众山小。”&#xff0c;每次看见这句诗的时候&#xff0c;总想去泰山看一看&#xff0c;感受诗中的壮美山河景色&#xff01; 机不可失时不再来&#xff0c…

JVM图解

JVM图解 一、JVM的运行时数据区 概览JVM运行时数据区主要包括以下几个部分&#xff1a;程序计数器、虚拟机栈、本地方法栈、方法区、堆&#xff1b;其中 栈是运行时的单位&#xff0c;而堆是存储的单位&#xff01; 1.程序计数器 程序计数器可以看作是当前线程所执行的字节码…

调用阿里API实现银行卡实名认证

调用阿里API实现银行卡实名认证 1&#xff0e;作者介绍2&#xff0e;算法介绍2.1 阿里云技术介绍2.2 API介绍 3&#xff0e;实验代码3.1 调用阿里云API流程3.2 代码实现3.2.1完整代码3.2.2实验结果 4&#xff0e;报错分析5&#xff0e;参考链接 1&#xff0e;作者介绍 薛维哥&…

针对潜在客户CRM如何进行管理?

CRM客户管理系统可以帮助企业管理客户&#xff0c;提高客户转化率&#xff0c;增加企业收入和利润。那么&#xff0c;在CRM中如何进行潜在客户管理呢&#xff1f;本文将从以下几个方面来为您解答。 一、什么是潜在客户&#xff1f; 潜在客户是指对企业的产品或服务有意向&…

驱动开发:内核遍历文件或目录

在笔者前一篇文章《驱动开发&#xff1a;内核文件读写系列函数》简单的介绍了内核中如何对文件进行基本的读写操作&#xff0c;本章我们将实现内核下遍历文件或目录这一功能&#xff0c;该功能的实现需要依赖于ZwQueryDirectoryFile这个内核API函数来实现&#xff0c;该函数可返…

docker的资源控制

一、CPU控制 cgroups&#xff0c;是一个非常强大的linux内核工具&#xff0c;他不仅可以限制被namespace隔离起来的资源, 还可以为资源设置权重、计算使用量、操控进程启停等等。所以cgroups (Control groups) 实现了对资源的配额和度量。 cgroups有四大功能: 资源限制:可以…

报表生成器FastReport .Net用户指南:“Picture“对象

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案&#xff0c;使用FastReport .NET可以创建独立于应用程序的.NET报表&#xff0c;同时FastReport .Net支持中文、英语等14种语言&#xff0c;可以让你的产品保证真正的国际性。 FastReport.NET官方版…

【30天熟悉Go语言】6 Go 复杂数据类型之指针

文章目录 一、前言二、数据类型总览三、指针1、特殊运算符& *2、内存角度来看指针3、使用指针修改数据4、指针使用的注意事项5、对比着看Java的引用类型 三、总结 一、前言 Go系列文章&#xff1a; GO开篇&#xff1a;手握Java走进Golang的世界2 Go开发环境搭建、Hello Wor…