为docker容器设置独立ip,bip项重启后

By admin in 美高梅手机版4858 on 2019年4月9日

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

docker

[toc]

一.凭借软件

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

           
但是,无论修改/etc/default/docker中的,DOCKE汉兰达_OPTS=”–bip=X.X.X.X2四”后重启docker,依旧修改/etc/docker/daemon.json.中的”bip”:
“X.X.X.X2四”,后重启docker,都遗落docker0的IP更新,

 在新浪上看出那壹段,先mark一下。

安装国内镜像源

应用方法

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

二. 搭建网桥

            尽管修改上述任一项之后,再用ifconfig docker0 x.x.x.x netmask
255.25五.255.0改动docker0,  1旦重启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 常用命令

删除全体未运转的容器

一、停用全部周转中的容器:
docker stop $(docker ps -q)
贰、删除全数容器:
docker rm $(docker ps -aq)
三、一条命令完成停用并剔除容器:
docker stop $(docker ps -q) & docker rm $(docker ps -aq)

2.1 目的

将Docker容器中的操作系统,暴光于实体互联网中;达成Docker容器在多宿主间的消息交互。

遭遇docker 版本: 18.03.1-ce

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

NAT网络–默认

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

Docker 服务默许会成立2个 docker0 网桥(其上有一个 docker0
内部接口),它在内核层连通了别的的大体或编造网卡,那就将有着容器和本地主机都放到同1个物理网络。

是因为docker0为Docker容器分配的是一个里边地址,所以要求将docker0删除。运营下述命令:

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

ubuntu 版本为docker容器设置独立ip,bip项重启后。:Ubuntu 14.04.5
LTS 

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

桥接网络–使用起来比较辛勤

1.停止docker服务
service docker stop

二.删减默许网卡(桥)

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和子网

这一步会半途而返互连网

4.清空宿主机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 #编写制定文件

6.开发银行容器,并设置互连网
docker run -itd –net=none –name=ubuntu001 ubuntu /bin/bash
pipework br0 ubuntu001 192.168.31.221/24@192.168.31.220
柒.进来容器
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 制作镜像的法子二:通过容器commit提交成镜像
这种办法比较不难

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

二.布局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
美高梅手机版4858,docker import – /home/myubuntu-export-1204.tar

二.三 建立新网桥

树立3个新网桥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
建立三个新网桥,原来的文章件改为:

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系统下,建立二个新网桥共必要操作多少个文件:
/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

操作如下命令使难题化解,:

 

2.三.三 重启宿主

修改网络参数,重启互连网只怕不会收效,建议重启宿主。
至此,新网桥搭建完结。

$ sudo service docker stop

 

三 配置Docker后台进度参数

此部分工作至关首如若透过修改docker后台进度参数的措施,关闭网桥,为互连网布局举行准备。

$ sudo ip link set dev docker0 down

总得在–net=none方式下才能拿用pipework设置ip.

3.一 Docker配置文件地点

Docker的配置文件能够设置超越二分之一的后台过程参数,在各个操作系统中的存放地方不一样等:
在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是172.17.0.0/1陆网段,要想改为其余网段,能够直接修改网桥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音信。以下用四个示范表达:

# 使用的镜像为: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镜像。

 

二、容器默许互联网布局进程

先创设3个docker0的网桥,使用Veth
pair创造一对虚拟网卡,一端放到新创立的容器中,相提并论命名eth0,另一端放到宿主机中,以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

接下去运维三个容器,先不布置互联网音信:

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

 

不安顿ip的原委是:容器运维后活动随机分配一个网桥段的IP,那几个IP不管你宿主机互连网中是还是不是业已分配,它都会依照本身的算法来分配IP,docker有温馨的壹套分配算法。
就此既然接纳桥接网络,就要优先安排好IP分配。

 

4、创制容器没安排网络,该怎么安插呢?

pipework是贰个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命名空间的互联网参数。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有