Docker-关于docker容器之间的连通性及容器与宿主机之间的连通性

Posted DullThinking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker-关于docker容器之间的连通性及容器与宿主机之间的连通性相关的知识,希望对你有一定的参考价值。

一、容器与宿主机之间的连通性

检查宿主机防火墙状态
如果可以关闭宿主机防火墙即可通信。
如果不能关闭防火墙,可开放宿主机相关接口,及允许访问id
注意:开放ip一定是容器在宿主机上的虚拟ip,而不是宿主机的ip地址

#通过命令查看宿主机下容器的虚拟网络ip
ip a
# 查看宿主机防火墙对外开放的ip及端口
cat /etc/firewalld/zones/public.xml
# 以root身份进入容器
docker exec -it -u root 61da8089ca0a /bin/sh
# 检查是否可以通信
ping 宿主机ip
#重新加载防火墙
firewall-cmd --reload

问题1【Docker】启动container的时候出现iptables: No chain/target/match by that name

#具体错误信息
Error response from daemon: driver failed programming external connectivity
 on endpoint jenkins (a8ea15bf9b3dbed599d059d638f79f9dd5e875556c39bfb41e6563d3feedb81b):
  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 50000 -j DNAT
 --to-destination 172.18.0.6:50000 ! -i br-031aa3930383: iptables: No chain/target/match
 by that name.

错误是由于网关重新启动了,导致docker network无法对新container进行网络配置,也就是没有网管的操作权限,做重启处理
解决方式:重启docker

service docker restart
# 或
systemctl restart  docker

二、容器之间的连通性(同一宿主机)
容器之间联通,主要是将需要互通的容器放到同一网络内即可
1.通过docker直接启动的容器

#1.启动时设置
docker run -itd --name c3 --net backend centos
docker run -itd --name c2 --net backend centos
docker run -itd --name c1 --net frontend centos
#2.启动后设置
docker network connect backend  c1
#查看
docker exec -it c2 /bin/bash
yum install -y net-tools  #安装网络工具包
ping c2      #处于backend 通
ping c3      #处于backend 通

2.通过docker-compose启动的容器

version: \'2\'
services:
  c1:
    image: c1:base1.0
    container_name: c1
    restart: always
    dns_search: .
#    networks:
#      - nets
    volumes:
    ports:
      - 10090:9090
    tty: true
  c2:
    image: c2:base1.0
    container_name: c2
    restart: always
    dns_search: .
    external_links:
      - prometheus
    volumes:
    ports:
      - 13000:13000
    environment:
      GF_RENDERING_SERVER_URL: http://renderer:8081/render
      GF_RENDERING_CALLBACK_URL: http://grafana:13000/
      GF_LOG_FILTERS: rendering:debug
    tty: true
  c3:
    image: c3:base1.0
    container_name: c3
    dns_search: .
    external_links:
      - c1
    restart: always
    ports:
      - 10081:8081
    environment:
      ENABLE_METRICS: \'true\'
networks:
  default:
    external:
      name: c_nets

注意:external_links、networks

参考链接
【Docker】启动container的时候出现iptables: No chain/target/match by that name
docker设置不同网络和迁移到指定网络

以上是关于Docker-关于docker容器之间的连通性及容器与宿主机之间的连通性的主要内容,如果未能解决你的问题,请参考以下文章

centos7下安装docker(12.3容器之间的连通性)

macvlan 网络隔离和连通 - 每天5分钟玩转 Docker 容器技术(57)

macvlan 网络隔离和连通 - 每天5分钟玩转 Docker 容器技术(57)

使用nsenter进行docker网络连通性测试

docker网络详解

windows连通CentOS虚拟机中的docker容器不通?