zoukankan      html  css  js  c++  java
  • docker容器使用host主机模式修改宿主机的iptables规则

    有时遇到需要在容器内部修改宿主机的iptables规则的需要,比如笔者最近就遇到这样的需求,有什么办法可以实现呢?

    答案肯定是有,慢慢道来。

    docker的容器运行时,其network namespace是默认bridge形式,可以简单理解为nat形式,通过端口映射可以实现遇主机外的host通信。除此以外还有多种net形式,比如host,none,container等,感兴趣可以参考博文:docker 网络的几种模式

    通常我们启动docker运行时,虽然也是root用户,但不是真正的root权限,很多内核态的权限并没有开放,比如iptables,具体权限可以参考:docker容器权限设置--cap-add | --cap-drop | privileged

    比如,我们本文开头说到的容器内部修改宿主机的iptables需求,我们可以通过cap-add及network-mode这两项实现。
    启动docker容器有多种方式,常见的有docker rundocker-compose up两种方式,分别对应单容器启动与多容器形成服务的启动,下面看看单容器启动与compose启动。

    docker run

    举个例子:

    docker run -td --name=test --cap-add=NET_ADMIN --cap-add=NET_RAW --net=host [-p | -v ] image_name|ID /bin/bash
    

    docker-compose

    举个例子:
    docker-compose.yaml文件里面设置

    version: "3.6"
    
    service:
      server_name:
        image: xxx
        hostname: xxx-test2
        container_name: xxx-test2
        # privileged: true
        cap_add:
          - NET_ADMIN
          - NET_RAW
        network_mode: "host"
        # depends_on:
        #   redis:
        #     condition: service_started
        
        volumes:
          - /opt/xxx/:/opt/xxx/
          - /var/log/xxx/:/opt/log/xxx/
        
        restart: always
        command: /bin/bash 
        tty: true
        stdin_open: true
    
        logging: 
          options:
            max-size: "200M"
            max-file: "5"
    

    通过上面的两种方式设置,即可实现容器修改宿主机的iptables的目的,具体的iptables的修改参考博文:linux下iptables命令应用及配置规则

  • 相关阅读:
    taglib
    ThinkPHP魔术方法
    给图片添加文字
    公益筹模板
    清空(数据库+文件夹)
    php——文件下载
    查询上一个tp语句
    安装wampserver 2.5的时候出现丢失MSVCR100.dll的解决办法。
    ThinkPHP3.2.3 安装教程
    java基础——File类的基本用法
  • 原文地址:https://www.cnblogs.com/davis12/p/14752419.html
Copyright © 2011-2022 走看看