手动为容器设置ip地址
1、安装bridge-utils
# aptitude install -y bridge-utils
2、配置网桥
# vim /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual
auto veth0
iface veth0 inet static
address 122.14.206.140
netmask 255.255.254.0
gateway 122.14.206.1
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp on
auto veth1
iface veth1 inet static
address 192.168.5.86
netmask 255.255.240.0
gateway 122.14.206.1
bridge_ports eth1
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp on
# /etc/init.d/networking restart
3、修改容器IP地址的脚本
# cat mkipinner.sh
#/bin/bash
#判断是否给定位置参数,如果没有则提示用法
if [ -z $1 ] || [ -z $2 ] || [ -z $3 ] || [ -z $4 ];
then
echo "*****Input the necessary parameters: CONTAINERID IP MASK GATEWAY ETHNAME"
echo "*****Use the script like: sh manual_con_static_ip.sh a122-v00 192.168.5.123 24 192.168.5.1"
exit
fi
#为4个位置参数设置变量
CONTAINERID=$1
SETIP=$2
SETMASK=$3
GATEWAY=$4
#判断容器是否已存在
ethlist=($(docker ps|grep -w "$CONTAINERID"|awk '{print $1}'))
if [[ ${#ethlist[@]} -ne 1 ]];then
echo "can not ensure the container"
exit 1
fi
#设置变量name等于容器ID,设定虚拟网卡名称等于veth+$name前6位
echo $*
name=${ethlist[0]}
ETHNAME="veth${name:0:6}"
#判断该虚拟网卡网卡是否存在,如果存在,则提示是否删除
ifconfig $ETHNAME > /dev/null 2>&1
if [ $? -eq 0 ]; then
read -p "$ETHNAME exist,do you want delelte it? y/n " del
if [[ $del == 'y' ]]; then
ip link del $ETHNAME
else
exit
fi
fi
#获取容器PID
pid=`docker inspect -f '{{.State.Pid}}' $CONTAINERID`
mkdir -p /var/run/netns
find -L /var/run/netns -type l -delete
#判断容器的网络名称空间是否已存在,如果存在则删除
if [ -f /var/run/netns/$pid ]; then
rm -f /var/run/netns/$pid
fi
#创建名称空间,将容器的网络名称空间软链接到/var/run/netns/
ln -s /proc/$pid/ns/net /var/run/netns/$pid
#添加一对虚拟网卡
ip link add $ETHNAME type veth peer name $pid"1"
#将虚拟网卡添加到网桥veth1
brctl addif veth1 $ETHNAME
#启动虚拟网卡
ip link set $ETHNAME up
#将虚拟网卡添加到容器的网络名称空间
ip link set $pid"1" netns $pid
#删除容器内已存在的eth1
ip netns exec $pid ip link del eth1 > /dev/null 2>&1
#将容器内的网卡$pid"1"重命名为eth1,并启动
ip netns exec $pid ip link set dev $pid"1" name eth1
ip netns exec $pid ip link set eth1 up
#为容器的eth1网卡设置IP地址和掩码,添加默认网关
ip netns exec $pid ip addr add $SETIP/$SETMASK dev eth1
ip netns exec $pid ip route add default via $GATEWAY
4、脚本使用方法
/root/bin/mkipinner.sh <container_name> <ip_address> <netmask_num> <gateway>
示例:
# /root/bin/mkipinner.sh uy01-05-v10 192.168.10.186 20 192.168.1.254
5、单独修改网关
# ip netns exec `docker inspect -f '{{.State.Pid}}' $CONTAINERID` ip route del default via 192.168.1.248
# ip netns exec `docker inspect -f '{{.State.Pid}}' $CONTAINERID` ip route add default via 192.168.1.254
合成一条命令,尽量减少网络中断时间
# for id in `cat id`;do ip netns exec `docker inspect -f '{{.State.Pid}}' $id` ip route del default via 192.168.1.248 && ip netns exec `docker inspect -f '{{.State.Pid}}' $id` ip route add default via 192.168.1.254;done
在容器内测试网络
# route -n
# curl myip.oupeng.com
122.14.206.132
手动为容器设置ip地址的更多相关文章
- Windows下使用命令行设置ip地址的DNS服务器
使用命令行或者编写bat批处理设置网络连接的IP地址以及DNS服务器地址有时候会比手动更加方便,IP地址和DNS的设置一般是配合的,常用到的几个状态是: 1.IP地址动态获取,DNS也动态 2.IP地 ...
- Windows下使用批处理设置IP地址,DNS
自动获取IP地址: echo 本地连接 改成你想要改的连接名 比如 无线网络连接set cname=本地连接 echo %cname% 正在设置自动获得IP地址,请稍等...... netsh int ...
- [原创]-CMD命令设置IP地址
问题描述 在实际工作中,尤其是像我们这种BI分析人员,在做项目的时候,时常都需要因客户的不同随时切换不同的网络环境,有时可能需要在公司和客户之间来回的穿梭.交替.问题也就随之而来:每次客户那里都需要设 ...
- 【原创】CMD命令设置IP地址
问题描述 在实际工作中,尤其是像我们这种BI分析人员,在做项目的时候,时常都需要因客户的不同随时切换不同的网络环境,有时可能需要在公司和客户之间来回的穿梭.交替.问题也就随之而来:每次客户那里都需要设 ...
- 利用netsh命令设置IP地址/DNS服务器地址
一.设置IP地址 1. 自动获取IP地址: netsh interface ip set address [name=]"本地连接" [source=]dhcp 2. 手动设置IP ...
- VMware CentOS 设置IP地址
VMware CentOS 设置IP地址 1. 设置虚拟机网络编辑器:参考:https://www.cnblogs.com/1285026182YUAN/p/10440443.html 2. Cent ...
- SUSE Linux Enterprise Server 设置IP地址、网关、DNS
说明: ip:192.168.21.172 子网掩码:255.255.255.0 网关:192.168.21.2 dns:8.8.8.8 8.8.4.4 1.设置ip地址 vi /etc/syscon ...
- C#设置IP地址,启用禁用适配器
界面效果图如下: 报表界面 说下关键代码 需要开启 Windows Management Instrumentation服务(默认已经开启),在程序中需要增加 Management引用. 主要有Net ...
- linux下设置ip地址 gw网关,dns的方法
本文介绍下,在linux中设置IP地址.网关.dns的方法,有需要的朋友作个参考吧. 设置linux网络的方法有两种:第一种:使用命令修改(直接即时生效) 复制代码代码示例: ip and net ...
随机推荐
- Hyperledger Fabric 1.0 从零开始(一)
在HyperLedger/Fabric发布0.6的时候,公司就已经安排了一个团队研究这一块,后来也请IBM的专家组过来培训了一批人,不幸的是,这批人后来全走了,然后1.0就发布了.自从2017年7月H ...
- Centos7下使用RDO方式安装openstack-r版
一.前言 OpenStack是一个开源的云计算管理平台项目,OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单.可大规模扩展.丰富.标准统一的云计算管理平台.OpenStack通过各种 ...
- Codeforces Round #515 (Div. 3) 解题报告(A~E)
题目链接:http://codeforces.com/contest/1066 1066 A. Vova and Train 题意:Vova想坐火车从1点到L点,在路上v的整数倍的点上分布着灯笼,而在 ...
- 吴恩达(Andrew Ng)——机器学习笔记1
之前经学长推荐,开始在B站上看Andrew Ng的机器学习课程.其实已经看了1/3了吧,今天把学习笔记补上吧. 吴恩达老师的Machine learning课程共有113节(B站上的版本https:/ ...
- (xampp)lampp 下配置https(ssl)自签双向认证以后 apache无法启动解决方案
自签CA一般是没有应用场景的,因为需要客户端浏览器导入证书才能访问 但是在某些需要内部使用的场景下,确实是一个解决方案 但是在lampp配置了双向认证以后发现 原来自带的管理命令 lampp star ...
- python3 通过qq邮箱定时发送邮件
下面的代码为了每天定时发送监控邮件,监控什么呢?监控当天redis队列中是否有没有消费的数据,和当天mysql中新增的数据量 # -*- coding:utf-8 -*- from common.re ...
- [zabbix] zabbix从内部检测web页面
环境说明: 两台机器各运行一个tomcat实例,通过阿里云slb到后端,假设后端服务挂了一个,从外部访问整个服务还是可用的,所以需要从内部检测web页面. zabbix自带的web场景都是从外部检测w ...
- php 数组去重
php 数组去重 数组中重复项的去除 2010-07-28 15:29 一维数组的重复项: 使用array_unique函数即可,使用实例如下: <?php ...
- Daily Scrumming 2015.10.22(Day 3)
今明两天任务表 Member Today’s Task Tomorrow’s Task 江昊 学习rails ActiveRecord 购买.注册域名 继续学习rails ActiveRecord 数 ...
- 《Spring1之第三次站立会议》
<第三次站立会议> 昨天:我对自己找到的代码进行了相关的了解后,把它们在编译环境中进行了编译以及接着对代码进行逐步深入了解: 今天:我把小组成员找到的写关于登录界面的代码加到了我的项目工程 ...