zoukankan      html  css  js  c++  java
  • docker配置dns与容器的访问控制(6)

    Docker 没有为每个容器专门定制镜像,那么怎么自定义配置容器的主机名和DNS配置?秘诀就是它利用虚拟文件来挂载到容器的3个相关的配置文件。

    进入容器内使用mount命令可以看到挂载信息,这种机制可以让宿主机DNS信息发生更新后,所有Docker容器的 dns 配置通过 /etc/resolv.conf 文件立刻得到更新。

    如果用户想自行配置容器某些属性,在启动程序之中添加如下的参数即可:

    1.-h HOSTNAME or --hostname=HOSTNAME 设定容器的主机名,它会被写到容器的/etc/hostname 和 /etc/hosts。
    但它在容器外部看不到,既不会在docker ps中显示,也不会在其它容器的 /etc/hosts看到
    2.
    --dns=IP_ADDRESS 添加DNS服务器到容器的 /etc/resolv.conf中,让容器利用这个服务器来解析所有不在 /etc/hosts 中的主机名

    注意:如果没有--dns选项时,Docker会默认用宿主机上的 /etc/resolv.conf 来配置容器。

    容器访问控制

    容器的访问控制,主要通过Linux上的 iptables 防火墙来进行管理和实现。 

    容器访问外部网络[容器所有到外部网络的连接,源地址都会被NAT成本地系统的IP地址,这是使用iptables 的源地址伪装操作实现的。]

    容器要想访问外部网络,需要本地系统的转发支持,在linux系统中,检查转发是否打开

    [root@server ~]# sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 1

    如果为0,说明没有开启转发,则需要手动打开

    [root@server ~]# sysctl -w net.ipv4.ip_forward=1

    如果在启动Docker服务的时候指定 --ip-forward=true,Docker就会自动设定系统的 ip_forward 参数为1。

    [root@server ~]# docker run --rm --name myCentos -it centos /bin/bash   #启动一个容器
    [root@2bdfb90cb3e0 /]# ping www.baidu.com  #测试是否能够访问外部网络

    容器之间访问

    容器之间互相访问,需要两方面的支持。

    • 容器的网络拓扑是否已经互联。默认情况下,所有容器都会被连接到 docker0 网桥上
    • 本地系统的 iptables 是否允许通过

    默认情况下,容器之间是可以相互通信的

    访问所有的端口

    当启动Docker 服务时,默认会添加一条转发策略到iptables 的FORWARD链上。策略为通过(ACCEPT)还是禁止(DROP)取决于配置 --icc=true 还是 --icc=false。如果手动指定 --iptables=false 则不会添加iptables 规则。

    可见,默认情况下,不同容器之间是允许网络互通的。如果是为了安全考虑,可以在/etc/default/docker 文件中配置 DOCKER_OPTS=--icc=false 来禁止它。

     

  • 相关阅读:
    C#代码中函数调用相关问题
    C#语言编写代码时常用的三大循环
    c#语言中的类型转换
    tesseract_vs2015工具包使用
    Halcon除法
    halcon批量读取图片
    halcon分离路径名称
    Halcon旋转图片的研究
    关于Haclon使用GPU加速的代码实例
    OpenCV代码:画出轮廓的外接矩形,和中心点
  • 原文地址:https://www.cnblogs.com/topass123/p/12586352.html
Copyright © 2011-2022 走看看