现象:
由于办公搬迁,机房中的测试服务器有段时间不用,关机了。起来后,flannel
的IP段变了,遂想透过修改docker0的IP地址来使集群不奇怪工作起来。

docker

[toc]

一.借助软件

  • util-linux:实现docker-enter命令
  • pipework:整合Docker的inspect成效,钦赐Docker容器的IP地址、子网掩码和Gateway

           
不过,无论修改/etc/default/docker中的,DOCKERubicon_OPTS=”–bip=X.X.X.X24″后重启docker,依然修改/etc/docker/daemon.json.中的”bip”:
“X.X.X.X二四”,后重启docker,都遗落docker0的IP更新,

 在搜狐上观察那一段,先mark一下。

安装国内镜像源

运用方法

修改Docker配置文件/etc/default/docker如下:
DOCKER_OPTS=”–registry-mirror=http://aad0405c.m.daocloud.io”
使用service docker restart重启Docker服务即可。

贰. 搭建网桥

            纵然修改上述任1项之后,再用ifconfig docker0 x.x.x.x netmask
255.255.25伍.0修改docker0,  壹旦重启docker, docker0又重新上升到在此以前的IP

没有用过国内的云服务,不是很清楚。就像 @向军 所说的那样,修改interface可以解决问题

另外,docker不是一定要用172.*的地址段,你可以用docker -b BRIDGE指定其他的interface,使用其他的IP段
参见:https://docs.docker.com/articles/networking/#bridge-building
e.g.
# brctl addbr mydockerbridge
# ip addr add 192.168.1.1/24 dev mydockerbridge
# ip link set dev mydockerbridge up

# docker -d -b mydockerbridge

之后所有的docker container 就会使用192.168.1.*这个IP段了

作者:Honglin Feng
链接:https://www.zhihu.com/question/24863856/answer/29256378
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

docker 常用命令

删除全数未运维的器皿

1、停用全体运作中的容器:
docker stop $(docker ps -q)
二、删除全体器皿:
docker rm $(docker ps -aq)
3、一条命令达成停用并删除容器:
docker stop $(docker ps -q) & docker rm $(docker ps -aq)

2.1 目的

将Docker容器中的操作系统,揭破于实体网络中;完结Docker容器在多宿主间的音讯相互。

遭遇docker 版本: 18.03.1-ce

因为Ali云暗中认可把具有的私网地址段都加到导致docker找不到3个可用的IP段了。要缓解那一个难点只要求一步,修改/etc/network/interface
去掉172那段的路由,然后ip route del 17二.段的路由。

NAT网络–默认

二.二 删除docker自带的网桥docker0

Docker 服务暗中同意会创造一个 docker0 网桥(其上有几个 docker0
内部接口),它在内核层连通了别的的情理或编造网卡,那就将具有容器和地点主机都放到同3个大体网络。

出于docker0为Docker容器分配的是2个之中地址,所以要求将docker0删除。运维下述命令:

# 如果docker服务已经运行,需要停止服务
$ sudo service docker stop
 #停止服务后,运行
$ sudo ip link set dev docker0 down
$ sudo brctl delbr docker0

ubuntu 版本【澳门金沙国际】bip项重启后,容器多物理机分化容器通讯。:Ubuntu 14.04.5
LTS 

腾讯云没用过,依据同等思路排查下。

桥接网络–使用起来相比劳累

1.停止docker服务
service docker stop

2.删减默许网卡(桥)

root@Docker:~# ifconfig docker0 down        #停止docker默认网桥
root@Docker:~# brctl show                    #查看物理机上有哪些网桥
root@Docker:~# brctl delbr docker0          #删除docker默认网桥
  1. 自定义网桥
    brctl addbr br0 #自定义网桥
    ip link set dev br0 up

ifconfig br0 192.168.31.201 netmask 255.255.255.0
#给自定义网桥内定IP和子网

ip addr add 192.168.31.201/24 dev br0 #给自定义网桥内定IP和子网

这一步会暂停网络

四.清空宿主机ip

ip addr del 192.168.31.230/24 dev ens33
brctl addif br0 ens33
ip route del default
ip route add default via 192.168.31.1 dev br0

5.配置docker启动
echo ‘DOCKER_OPTS=”-b=br0 “‘ >> /etc/default/docker
#钦命网桥写入docker配置文件

vim /etc/default/docker #编排文件

陆.起步容器,并设置互联网
docker run -itd –net=none –name=ubuntu001 ubuntu /bin/bash
pipework br0 ubuntu001 192.168.31.221/24@192.168.31.220
7.进来容器
docker exec -i -t ubuntu001 /bin/bash

Docker的Ubuntu镜像安装的容器无ifconfig命令和ping命令

解决:
apt-get update
apt install net-tools # ifconfig
apt install iputils-ping # ping

docket 制作镜像的主意一:dockerfile

docket 制作镜像的措施2:通过容器commit提交成镜像
那种措施比较简单

1.安装vim
apt-get update
apt-get install vim

2.安插Ali云源
deb
http://mirrors.aliyun.com/ubuntu/
vivid main restricted universe muLTiverse
deb
http://mirrors.aliyun.com/ubuntu/
vivid-security main restricted universe multiverse
deb
http://mirrors.aliyun.com/ubuntu/
vivid-updates main restricted universe multiverse
deb
http://mirrors.aliyun.com/ubuntu/
vivid-proposed main restricted universe multiverse
deb
http://mirrors.aliyun.com/ubuntu/
vivid-backports main restricted universe multiverse
deb-src
http://mirrors.aliyun.com/ubuntu/
vivid main restricted universe multiverse
deb-src
http://mirrors.aliyun.com/ubuntu/
vivid-security main restricted universe multiverse
deb-src
http://mirrors.aliyun.com/ubuntu/
vivid-updates main restricted universe multiverse
deb-src
http://mirrors.aliyun.com/ubuntu/
vivid-proposed main restricted universe multiverse
deb-src
http://mirrors.aliyun.com/ubuntu/
vivid-backports main restricted universe multiverse

3.安装ssh
apt-get install openssh-server

四.导出镜像

镜像导出与导入
docker export furious_bell > /home/myubuntu-export-1204.tar
docker import – /home/myubuntu-export-1204.tar

二.三 建立新网桥

确立二个新网桥br0,与宿主的网卡绑定。宿主OS的出入使得新网桥br0建立的经过不一致,一下各自就Ubuntu和CentOS为例进行介绍:

 

作者:向军
链接:
来源:知乎
小说权归作者全部,转发请联系小编获得授权。

docker 部署jar

docker run -d -p 9999:9999 -v
/root/easyee-sh-springboot-4.2.0-RELEASE.jar:/usr/easyee-sh-springboot-4.2.0-RELEASE.jar
–name ee_9999 java:8 java -jar
/usr/easyee-sh-springboot-4.2.0-RELEASE.jar

2.3.1 Ubuntu

仅要求修改/etc/network/interfaces一个文书。
/etc/network/interfaces原为:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.44
netmask 255.255.255.0
gateway 192.168.1.1

修改前,提议备份/etc/network/interfaces文件:
$ sudo cp interfaces interfaces.bak
建立1个新网桥,原来的书文件改为:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
bridge_ports eth0
bridge_stp no
dns-nameserver 192.168.1.1

化解思路:在此以前有过升级docker的经验,也饱尝过类似的互联网难题,所以想到可以一贯把那个网桥干掉,重建网桥

 

2.3.2 CentOS

在CentOS系统下,建立1个新网桥共索要操作八个文本:
/etc/sysconfig/network-scripts/ifcfg-eth0;
/etc/sysconfig/network-scripts/ifcfg-br0。

#修改ifcfg-eth0
#备份:
$ sudo cp ifcfg-eth0 ifcfg-eth0.bak
#将ifcfg-eth0的内容改为:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
TYPE=Ethernet
BRIDGE=br0

新建ifcfg-br0

$ touch ifcfg-br0

写入

DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
USERCTL=no
IPADDR=192.168.1.3
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
PREFIX=24
DELAY=0
DNS1=192.168.1.1

操作如下命令使难点消除,:

 

二.3.3 重启宿主

修改网络参数,重启互联网大概不会立竿见影,提出重启宿主。
迄今结束,新网桥搭建实现。

$ sudo service docker stop

 

三 配置Docker后台进度参数

此部分工作重大是透过修改docker后台进程参数的办法,关闭网桥,为网络布局举办准备。

$ sudo ip link set dev docker0 down

不可能不在–net=none情势下才能拿用pipework设置ip.

3.1 Docker配置文件地点

澳门金沙国际,Docker的布局文件能够设置超过4/八的后台进度参数,在依次操作系统中的存放地点不雷同:
在Ubuntu中的地点是:/etc/default/docker;
在CentOS中的地方是:/etc/sysconfig/docker

$ sudo brctl delbr docker0

一、网络情势

3.2 Ubuntu

修改/etc/default/docker文件:

$ echo 'DOCKER_OPTS="-b=none"' >> /etc/default/docker

$ sudo service docker restart

docker协理多样互联网情势,使用–net选项内定:

3.3 CentOs

修改/etc/sysconfig/docker-network文件:

$ echo
'DOCKER_NETWORK_OPTIONS="-b=none"' > /etc/sysconfig/docker-network

 

  • host,–net=host,假如钦点此形式,容器将不会取得三个单独的network
    namespace,而是和宿主机共用二个。容器将不会虚拟出团结的网卡,IP等,而是采纳宿主机的IP和端口,也便是说要是容器是个web,那直接待上访问宿主机:端口,不供给做NAT转换,跟在宿主机跑web1样。容器中除去互连网,别的都依旧隔开的。

  • container,–net=container:NAME_or_ID,与钦定的器皿共同利用互连网,也不曾网卡,IP等,三个容器除了网络,别的都照旧隔绝的。

  • none ,–net=none,获得独立的network
    namespace,然而,并不为容器实行其余互联网布置,要求大家温馨手动配置。

  • bridge,–net=bridge,默许docker与容器使用nat互联网,一般分配IP是17二.一七.0.0/16网段,要想改为此外网段,能够直接修改网桥IP地址,例如:

3.4 重启Docker服务

#至此,完成对Docker后台进程参数的修改,重启Docker服务:
$ sudo service docker restart

  $ sudo ifconfig docker0 192.168.10.1 netmask 255.255.255.0

4 测试demo

行经上文操作,宿主已搭建新的网桥br0,并完毕了Docker后台进度参数的装置。此时,能够经过pipework命令配置Docker容器的IP地址、Netmask和Gateway音信。以下用1个示范表明:

# 使用的镜像为:someOS:v1.0
# 建立的Docker容器名称为test000

# 启动Docker容器,指定其名称为test000,hostname:test000
$ sudo docker run –itd -h test000 –-name test000 someOS:v1.0 /bin/bash

# 使用pipework配置容器的网络:
# IP: 192.168.1.44
# Netmask: 24
# Gateway: 192.168.1.1
$ pipework br0 -i eth0 test000 192.168.1.44/24@192.168.1.1
#连接容器测试
$ sudo docker exec -it test000 /bin/bash

比方容器test000无法解析域名,能够运转,关闭宿主机防火墙,那一点很要紧

$ echo "echo 'nameserver 192.168.1.1' > /etc/resolv.conf" >> ~/.bashrc

并将test000 commit为新的someOS镜像。

 

二、容器暗中认可互联网布局进度

先创建二个docker0的网桥,使用Veth
pair创设壹对虚拟网卡,一端放到新创设的器皿中,比量齐观命名eth0,另1端放到宿主机中,以veth+随机七个字符串名字命名,并将以此互联网设施进入到docker0网桥中,网桥自动为容器分配四个IP,并设置docker0的IP为容器暗许网关。同时在iptables添加SNAT转换网桥段IP,以便容器访问外网。

Veth par是用以分歧network namespace间进行通讯的主意,而network
namespace是实现隔开分离网络。

 

三、容器桥接宿主机互连网

 

关门docker并安装桥接格局:

$ sudo apt-get install bridge-utils

$ sudo service docker stop

#关闭默许网桥

$ sudo ip link set dev docker0 down

#去除暗中认可网桥

$ sudo brctl delbr docker0

创造桥接网卡:

$ sudo brctl addbr br0    #创办网桥

$ sudo vi /etc/network/interfaces #将原本宿主机IP配置到新创立的网桥上

1
2
3
4
5
6
7
8
auto  eth0
iface eth0 inet manual
auto  br0
iface br0 inet static
    address 192.168.10.10   #宿主机IP
    netmask 255.255.255.0
    gateway 192.168.10.1
    dns-nameservers 192.168.10.1

$ sudo /etc/init.d/networking restart

重启网卡后,再经过ifconfig命令查看,多了br0网桥,并且IP地址也绑定在了地点。

#修改docker桥接网桥,一视同仁启

 

$ sudo  vi /etc/default/docker

DOCKER_OPTS=”-b=br0″

$ sudo service docker restart

接下去运营1个容器,先不布置网络音信:

$ sudo docker run -itd –name=ubuntu_test –net=none ubuntu  

 

不配备ip的来头是:容器运维后自行随机分配三个网桥段的IP,那一个IP不管你宿主机互连网中是还是不是业已分配,它都会根据自身的算法来分配IP,docker有友好的一套分配算法。
故而既然采纳桥接互联网,就要优先安排好IP分配。

 

肆、创造容器没陈设互联网,该怎么布局呢?

pipework是2个LXC互连网管理工科具,用shell写的,有200多行代码。能够给容器配置定位IP地址:

$ git clone 

$ sudo cp pipework/pipework /usr/local/bin/

$ sudo pipework br0 ubuntu_test 192.168.18.29/24@192.168.18.1

Warning: arping not found; interface may not be immediately reachable

这一步是给安顿容器网络并连接网桥,@左侧是与宿主机同网段IP,右侧是网关。

提示arping命令没觉察,能够透过apt-get install arping来安装。

$ sudo brctl show   #查阅虚拟网卡veth开始的已参与网桥

$ sudo docker attach ubuntu_test  

#跻身容器用ifconfig命令查看,IP音讯已经陈设上,通过ping百度及同网段IP是相通的,配置成功。

pipework工具怎么落实配置的IP呢?

pipework是由此ip netns
exec进入容器的net命名空间,来布署容器net命名空间的网络参数。

相关文章