使用pipework将Docker容器配置到本地网络环境中
使用pipework将Docker容器配置到本地网络环境中
需求
在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求。要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了。
下面我们就使用pipework工具来实现这一需求。
安装pipework
$ git clone https://github.com/jpetazzo/pipework
$ sudo cp pipework/pipework /usr/local/bin/
使用pipework
首先看一下,当前我的主机的IP地址为192.168.0.109/24,网关为192.168.0.1,使用的是eth0这块网卡。假定我需要给Docker容器的分配的地址为192.168.0.200。
首先创建一个容器
$ sudo docker run -itd --name test ubuntu /bin/bash
此时,查看容器的IP地址信息,其中只有一个eth0,IP地址是172.17.0.3/16 是Docker默认分配的地址,如下:
$ sudo docker exec test ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
25: eth0@if26: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:3/64 scope link
valid_lft forever preferred_lft forever
下面配置容器test的网络,并连接到网桥br0上,其中@后面是网关地址
$ sudo pipework br0 test 192.168.0.200/24@192.168.0.1
这一步中,pipework首先会检查主机是否存在br0网桥,若不存在,就自己创建一个。这里以”br”开头,所以创建的是Linux bridge。如果以”ovs”开头,就会创建OpenVswitch网桥。
另外,如果主机环境中有DHCP服务,也可以通过DHCP的方式获取IP
$ sudo pipework br0 test dhcp
此时查看容器的IP地址信息,发现新增加了一个网卡eth1,分配的IP地址是192.168.0.200/24,如下:
$ sudo docker exec test ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
25: eth0@if26: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:3/64 scope link
valid_lft forever preferred_lft forever
27: eth1@if28: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue qlen 1000
link/ether 4e:ab:e0:c5:a7:81 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.200/24 brd 192.168.0.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::4cab:e0ff:fec5:a781/64 scope link
valid_lft forever preferred_lft forever
将主机eth0桥接到br0上,并把eth0的IP配置在br0上。这里由于是远程操作,中间网络会断掉,所以放在一条命令中执行。
$ sudo ip addr add 192.168.0.109/24 dev br0
$ sudo ip addr del 192.168.0.109/24 dev eth0
$ sudo brctl addif br0 eth0
$ sudo ip route del default
$ sudo ip route add default via 192.168.0.1 dev br0
上面的命令执行过程中会断一次网,所以可以将上面的命令放到一步中执行,如下:
$ sudo ip addr add 192.168.0.109/24 dev br0; \
sudo ip addr del 192.168.0.109/24 dev eth0; \
sudo brctl addif br0 eth0; \
sudo ip route del default; \
sudo ip route add default via 192.168.0.1 dev br0
注:上面这一步只有在第一次绑定容器地址的时候会用到,一旦执行过后,就会在主机上把原来eth0的IP地址分配给br0,然后把eth0和br0连起来。所以以后再创建容器就不需要执行这一步了。而只需要执行下面的绑定容器地址的命令就可以了。
$ sudo pipework br0 test 192.168.0.200/24@192.168.0.1
运行上面命令后查看主机的IP地址信息,如下:
$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
link/ether 76:e0:49:4f:00:ac brd ff:ff:ff:ff:ff:ff
inet 192.168.0.109/24 brd 192.168.0.255 scope global dynamic eth0
valid_lft 1464sec preferred_lft 1464sec
inet6 fe80::6be1:989e:26e9:488e/64 scope link
valid_lft forever preferred_lft forever
$ ip addr show br0
12: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 76:e0:49:4f:00:ac brd ff:ff:ff:ff:ff:ff
inet 192.168.0.109/24 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::fc31:97ff:fe9e:872c/64 scope link
valid_lft forever preferred_lft forever
现在,另开一个终端,可以通过ping 192.168.0.200来测试容器网络。或者从其它物理主机上ping这个容器地址。
使用pipework将Docker容器配置到本地网络环境中的更多相关文章
- 使用pipework将Docker容器桥接到本地网络环境中
在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了.pipew ...
- docker容器配置独立ip
一般安装docker后都会通过端口转发的方式使用网络,比如 “-p 2294:22” 就将2294抓发到22端口来提供sftp服务,这样使用起来没有问题.但端口号很难记忆,如果前边有nginx等抓发工 ...
- 利用pipework为docker容器设置固定IP
今天介绍如何在redhat/centos7系列机器上使用pipework为docker启动的容器指定一个固定ip,我们知道默认情况下,docker会使用 bridge网络模式为每一个启动的容器动态分配 ...
- Docker容器之搭建本地私有仓库
Docker容器之搭建本地私有仓库 本地私有仓库搭建的具体步骤 首先下载 registry 镜像 docker pull registry 在 daemon.json 文件中添加私有镜像仓库的地址并重 ...
- Docker容器配置远程登录
Docker容器配置远程登录 前言 docker 的网络模式主要有三种,bridge.host.none: pridge是docker安装后自动创建的虚拟网卡,创建容器时默认使用此模式. host是指 ...
- JBOSS安装与配置搭建本地项目环境(方便前端开发调式)
JBOSS安装与配置搭建本地项目环境 什么是JBOSS? JBOSS是EJB的服务器,就像Tomcat是JSP服务器一样,就是服务器的一种. 环境搭建如下: 一:首先安装JDK,配置环境变量(PAT ...
- VScode配置CMD本地运行环境(2.0)
VScode配置CMD本地运行环境(2.0) 官方Task.json说明 完整的Task.json配置信息 Task.json预定义变量 看了很多网上的教程都说需要下载VScode的python插件, ...
- PhpStorm连接Docker容器配置xdebug断点调试
本教程主要演示xdebug在PhpStorm中配置方法. 一.环境说明 1.Mac笔记本(本教程演示过程使用的是Mac OS操作系统,和windows环境是有区别的,这一点需要特别注意): 2.在Ma ...
- Ubuntu编译安装HAprox+Keepalived+MySQL负载高可用架构(结合Docker容器配置)
系统环境:Ubuntu16.04(Docker容器) 架构环境: Keepalived/HAproxy MASTER: 172.17.0.4 Keepalived/HAproxy BACKUP: 17 ...
随机推荐
- hadoop随手笔记
1.Hadoop Streaming 是为了方便不太熟悉java用户编写MR程序的工具.用户可以将任何可执行文件(C++)或者脚本(python,ruby)作为Mapper/Reducer, 提高了效 ...
- 用python收集系统信息
实现的功能 搜集系统消息,有生产商,CPU型号,核数,内存,主机名,发行版名称 可运行的系统 目前已在RHEL, Ubuntu, Archlinux上测试通过 获取不同发行版主机名逻辑判断思路分析 大 ...
- hibernate关联非主键注解配置
现在有两张表:一张t_s_user用户表和t_s_user_serial_number用户序号表 CREATE TABLE `t_s_user` ( `id` ) NOT NULL, `email` ...
- python中的参数传递
一般的参数顺序是先位置,再关键字,然后是包裹位置传递,包裹关键字传递.
- 解决ubuntu在当前位置打开终端功能
ubuntu右键在当前位置打开终端 ubuntu增加右键命令: 在终端中打开 软件中心: 搜索nautilus-open-terminal安装 命令行: sudo apt-ge ...
- byte字节数组的压缩
写入内容到文件 public static void writeBytesToFile() throws IOException{ String s = "aaaaaaaaD等等" ...
- chengdongyue的笔记
---------------------------------------- Linux 基础 --------------------------------1.Linux的诞生 1.unix两 ...
- 利用python 模块读取csv文件信息
还有一个比较简单的方法 # -*- coding=utf-8 -*- import pandas as pddf = pd.read_csv("20170320094630.csv" ...
- centos 6.6 配置xdmcp远程桌面
1.首先安装 xdm软件:yum install xdm vi /etc/X11/xdm/Xaccess: * allow vi /etc/gdm/custom.conf: [security] A ...
- mac下通过brew切换php版本
第一步,先安装 brew Brew 是 Mac 下面的包管理工具,通过 Github 托管适合 Mac 的编译配置以及 Patch,可以方便的安装开发工具. Mac 自带ruby 所以安装起来很 ...