最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

docker 指定IP地址、與主機同網(wǎng)段IP

 更新時間:2017年05月13日 14:54:49   作者:wangdaoge  
這篇文章主要介紹了docker 指定IP地址、與主機同網(wǎng)段IP,非常具有實用價值,需要的朋友可以參考下

首先講一下docker的網(wǎng)絡(luò)模式:

我們使用docker run創(chuàng)建容器時,可以使用--net選項指定容器的網(wǎng)絡(luò)模式,docker一共有4中網(wǎng)絡(luò)模式:

1:bridge模式,--net=bridge(默認(rèn))。

這是dokcer網(wǎng)絡(luò)的默認(rèn)設(shè)置。安裝完docker,系統(tǒng)會自動添加一個供docker使用的網(wǎng)橋docker0,我們創(chuàng)建一個新的容器時,容器通過DHCP獲取一個與docker0同網(wǎng)段的IP地址。并默認(rèn)連接到docker0網(wǎng)橋,以此實現(xiàn)容器與宿主機的網(wǎng)絡(luò)互通。如下:

2:host模式,--net=host。

這個模式下創(chuàng)建出來的容器,將不擁有自己獨立的Network Namespace,即沒有獨立的網(wǎng)絡(luò)環(huán)境。它使用宿主機的ip和端口。

3:container模式,--net=container:NAME_or_ID。

這個模式就是指定一個已有的容器,共享該容器的IP和端口。除了網(wǎng)絡(luò)方面兩個容器共享,其他的如文件系統(tǒng),進程等還是隔離開的。

4:none模式,--net=none。

這個模式下,dokcer不為容器進行任何網(wǎng)絡(luò)配置。需要我們自己為容器添加網(wǎng)卡,配置IP。

因此,若想使用pipework配置docker容器的ip地址,必須要在none模式下才可以

以下是幾種分配IP的方式:

一、pipework

首先講一下docker的網(wǎng)絡(luò)模式:

我們使用docker run創(chuàng)建容器時,可以使用--net選項指定容器的網(wǎng)絡(luò)模式,docker一共有4中網(wǎng)絡(luò)模式:

1:bridge模式,--net=bridge(默認(rèn))。

這是dokcer網(wǎng)絡(luò)的默認(rèn)設(shè)置。安裝完docker,系統(tǒng)會自動添加一個供docker使用的網(wǎng)橋docker0,我們創(chuàng)建一個新的容器時,容器通過DHCP獲取一個與docker0同網(wǎng)段的IP地址。并默認(rèn)連接到docker0網(wǎng)橋,以此實現(xiàn)容器與宿主機的網(wǎng)絡(luò)互通。如下:

2:host模式,--net=host。

這個模式下創(chuàng)建出來的容器,將不擁有自己獨立的Network Namespace,即沒有獨立的網(wǎng)絡(luò)環(huán)境。它使用宿主機的ip和端口。

3:container模式,--net=container:NAME_or_ID。

這個模式就是指定一個已有的容器,共享該容器的IP和端口。除了網(wǎng)絡(luò)方面兩個容器共享,其他的如文件系統(tǒng),進程等還是隔離開的。

4:none模式,--net=none。

這個模式下,dokcer不為容器進行任何網(wǎng)絡(luò)配置。需要我們自己為容器添加網(wǎng)卡,配置IP。
因此,若想使用pipework配置docker容器的ip地址,必須要在none模式下才可以。

pipework安裝:

# wget https://github.com/jpetazzo/pipework/archive/master.zip
# unzip pipework-master.zip
# cp pipework-master/pipework /usr/local/bin/
# chmod +x /usr/local/bin/pipework

創(chuàng)建none模式的容器,為其分配IP。
#ip a show docker0


#docker run -idt --name test --net=none resin
#pipework docker0 test 172.17.42.100/16@172.17.42.1
#docker attach test

以上操作給新建的test容器分配了一個172.17.42.100的IP地址。

二、 docker默認(rèn)使用'bridge'來設(shè)置container的網(wǎng)絡(luò)模式(即從與docker0同網(wǎng)段的未使用的IP中取一個作為container的IP),我們這里使用'none'來實現(xiàn)自己手動配置container的網(wǎng)絡(luò)。

首先我們以**--net='none'**的方式啟動一個container

[yaxin@cube2x ~]$docker run -i -t --rm --net='none' ubuntu /bin/bash
root@db84e747c362:/# ifconfig -a

lo    Link encap:Local Loopback
     inet addr:127.0.0.1 Mask:255.0.0.0
     inet6 addr: ::1/128 Scope:Host
     UP LOOPBACK RUNNING MTU:65536 Metric:1
     RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:0
     RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

root@db84e747c362:/#

可以看到,由于我們使用'none'模式,container中沒有獲取到IP,甚至連網(wǎng)卡都沒有,下面我們開始給container配置IP

首先獲取container的pid(我們需要通過pid獲取file descriptor)

[yaxin@cube2x ~]$docker ps
CONTAINER ID    IMAGE              COMMAND      CREATED      STATUS       PORTS       NAMES
db84e747c362    docker.cn/docker/ubuntu:latest "/bin/bash"    4 minutes ago   Up 4 minutes           sharp_kirch
[yaxin@cube2x ~]$docker inspect -f "{{.State.Pid}}" sharp_kirch
23090

ip-netns的man page中有這樣一句

By convention a named network namespace is an object at /var/run/netns/NAME that can be opened. The file descriptor resulting from opening/var/run/netns/NAME refers to the specified network namespace

因而我們需要創(chuàng)建一個鏈接

[yaxin@cube2x ~]$sudo ln -s /proc/23090/ns/net /var/run/netns/23090

然后創(chuàng)建一對端到端的網(wǎng)卡,將veth_db84e747c3綁定到docker0網(wǎng)橋,并啟動。將另一塊網(wǎng)卡X放到container內(nèi)部

[yaxin@cube2x ~]$sudo ip link add veth_db84e747c3 type veth peer name X
[yaxin@cube2x ~]$sudo brctl addif docker0 veth_db84e747c3
[yaxin@cube2x ~]$sudo ip link set veth_db84e747c3 up
[yaxin@cube2x ~]$sudo ip link set X netns 23090

這時查看container的IP,會發(fā)現(xiàn)多了一個名為X的網(wǎng)卡

root@db84e747c362:/# ifconfig -aX    Link encap:Ethernet HWaddr 5a:7e:4d:ba:63:1c 
     BROADCAST MULTICAST MTU:1500 Metric:1
     RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:1000
     RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

lo    Link encap:Local Loopback 
     inet addr:127.0.0.1 Mask:255.0.0.0
     inet6 addr: ::1/128 Scope:Host
     UP LOOPBACK RUNNING MTU:65536 Metric:1
     RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:0
     RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

然后對container內(nèi)部新添加的網(wǎng)卡進行配置(可以通過man ip-netns更詳細(xì)查看)

[yaxin@cube2x ~]$sudo ip netns exec 23090 ip link set dev X name eth0
[yaxin@cube2x ~]$sudo ip netns exec 23090 ip link set eth0 up
[yaxin@cube2x ~]$sudo ip netns exec 23090 ip addr add 172.17.111.10/16 dev eth0
[yaxin@cube2x ~]$sudo ip netns exec 23090 ip route add default via 172.17.42.1

注意: 指定給container的IP必須跟docker0在同一網(wǎng)段,且給container的網(wǎng)關(guān)應(yīng)該為docker0的IP

最后,寫成shell腳本如下:

#!/usr/bin/env bash# filename: bind_addr.sh

if [ `id -u` -ne 0 ];then
  echo '必須使用root權(quán)限'
  exitfi

if [ $# != 2 ]; then
  echo "使用方法: $0 容器名字 IP"
  exit 1fi

container_name=$1bind_ip=$2

container_id=`docker inspect -f '{{.Id}}' $container_name 2> /dev/null`
if [ ! $container_id ];then
  echo "容器不存在"
  exit 2fibind_ip=`echo $bind_ip | egrep '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$'`
if [ ! $bind_ip ];then
  echo "IP地址格式不正確"
  exit 3fi

container_minid=`echo $container_id | cut -c 1-10`
container_netmask=`ip addr show docker0 | grep "inet\b" | awk '{print $2}' | cut -d / -f2`
container_gw=`ip addr show docker0 | grep "inet\b" | awk '{print $2}' | cut -d / -f1`

bridge_name="veth_$container_minid"
container_ip=$bind_ip/$container_netmask
pid=`docker inspect -f '{{.State.Pid}}' $container_name 2> /dev/null`
if [ ! $pid ];then
  echo "獲取容器$container_name的id失敗"
  exit 4fi

if [ ! -d /var/run/netns ];then
  mkdir -p /var/run/netns
fi

ln -sf /proc/$pid/ns/net /var/run/netns/$pid

ip link add $bridge_name type veth peer name X
brctl addif docker0 $bridge_name
ip link set $bridge_name up
ip link set X netns $pid
ip netns exec $pid ip link set dev X name eth0
ip netns exec $pid ip link set eth0 up
ip netns exec $pid ip addr add $container_ip dev eth0
ip netns exec $pid ip route add default via $container_gw
運行并寫入ip和容器名稱

 

配置容器與主機IP同一網(wǎng)段
先配置主機br0 
vi /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
DELAY=0
STP=yes
IPADDR=192.168.2.111
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
/etc/init.d/network restart

docker run -itd --name test centos /bin/bash
pipework br0 test 192.168.2.201/24@192.168.2.1

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Docker搭建RabbitMQ集群的方法步驟

    Docker搭建RabbitMQ集群的方法步驟

    本文主要介紹了Docker搭建RabbitMQ集群的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 使用Conda環(huán)境創(chuàng)建Docker鏡像的完整步驟指南

    使用Conda環(huán)境創(chuàng)建Docker鏡像的完整步驟指南

    Docker是實現(xiàn)容器化的主流工具之一,而Conda作為科學(xué)計算和Python的包管理器,與Docker的結(jié)合能為開發(fā)者提供高度靈活、易于管理的開發(fā)環(huán)境,這篇文章主要介紹了使用Conda環(huán)境創(chuàng)建Docker鏡像的完整步驟,需要的朋友可以參考下
    2025-03-03
  • Docker阿里云RocketMQ 4.5.1部署流程詳解

    Docker阿里云RocketMQ 4.5.1部署流程詳解

    RocketMQ是阿里開源的一款分布式消息中間件,具有日志監(jiān)控、消息推送、金融報文、電信信令、削峰填谷等功能.接下來通過本文給大家介紹Docker阿里云RocketMQ 4.5.1部署流程,感興趣的朋友一起看看吧
    2021-05-05
  • docker安裝mysql完美教程(建議收藏!)

    docker安裝mysql完美教程(建議收藏!)

    最近使用docker,故將數(shù)據(jù)庫和程序都用docker來一遍,下面這篇文章主要給大家介紹了關(guān)于docker安裝mysql完美教程的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • 理解Docker(2):Docker 鏡像詳細(xì)介紹

    理解Docker(2):Docker 鏡像詳細(xì)介紹

    這篇文章主要介紹了理解Docker(2):Docker 鏡像詳細(xì)介紹, 鏡像(image)是動態(tài)的容器的靜態(tài)表,有需要的可以了解下。
    2016-11-11
  • docker在ubuntu14.04下的安裝步驟

    docker在ubuntu14.04下的安裝步驟

    這篇文章主要介紹了docker在ubuntu14.04下的安裝步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • docker-compose up -d和docker-compose up --build的區(qū)別

    docker-compose up -d和docker-compose up -

    本文主要介紹了docker-compose up -d和docker-compose up --build的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • docker打包 commit和Dockerfile過程

    docker打包 commit和Dockerfile過程

    這篇文章主要介紹了docker打包 commit和Dockerfile過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Docker部署Spring-boot項目的示例代碼

    Docker部署Spring-boot項目的示例代碼

    這篇文章主要介紹了Docker部署Spring-boot的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • 如何在 Ubuntu 下通過 Docker 部署 Caddy 服務(wù)器

    如何在 Ubuntu 下通過 Docker 部署 Caddy 

    本文介紹了如何在Ubuntu系統(tǒng)下通過Docker部署Caddy服務(wù)器,首先安裝Docker,然后啟動Docker服務(wù)并設(shè)置為開機自啟,接著拉取Caddy鏡像,并創(chuàng)建一個Caddyfile配置文件,使用命令運行Caddy容器,并將本地的Caddyfile掛載到容器內(nèi),感興趣的朋友跟隨小編一起看看吧
    2025-03-03

最新評論

长寿区| 灌南县| 蓬安县| 临高县| 偏关县| 福鼎市| 泸西县| 鞍山市| 宝丰县| 营山县| 凤翔县| 汾西县| 鸡西市| 敦化市| 淮阳县| 麻江县| 广河县| 阿荣旗| 清苑县| 辽宁省| 大冶市| 商水县| 蚌埠市| 长兴县| 沁阳市| 铜鼓县| 内乡县| 宝清县| 大兴区| 思茅市| 安顺市| 浦城县| 收藏| 鹤庆县| 天柱县| 兰考县| 达拉特旗| 鹿泉市| 自治县| 封丘县| 买车|