Docker網絡模式

host模式,使用docker run時使用--net=host指定
docker使用的網絡實際上和宿主機一樣,在容器內看到的網卡ip是宿主機ip

container模式,使用--net=container:container_id/container_name
多個容器使用共同的網絡,看到的ip是一樣的

none模式,使用--net=none指定
這種模式下,不會配置任何網絡

bridge模式,使用--net=bridge指定默認模式
不用指定默認就是這種網絡模式。這種模式會爲每個容器分配一個獨立的Network Namespace。類似於vmware的nat網絡模式。同一個宿主機上的所有容器會在同一個網段下,相互之間是可以通信的。

1、從外部訪問容器
首先使用centos鏡像新建一個容器,然後在該容器中安裝httpd服務,並啓動

###啓動鏡像

docker run -itd centos
docker ps
docker exec -it 1ce0ec25afeb bash

###安裝nginx

yum install -y epel-release
yum install -y nginx

###再把該容器導成一個新的鏡像(centos-httpd),然後再使用新鏡像創建容器,並指定端口映射
docker commit -m "install nginx" -a "test" 1ce0ec25afeb centos_nginx

docker run -itd -p 5123:80 centos-nginx bash  
-p 可以指定端口映射,本例中將容器的80端口映射爲本地的5123端口

出現問題
新建的容器,啓動nginx或者httpd服務的時候會報錯
Failed to get D-Bus connection: Operation not permitted
這是因爲dbus-daemon沒有啓動,解決該問題可以這樣做
啓動容器時,要加上--privileged -e "container=docker" ,並且最後面的命令改爲/usr/sbin/init
docker run -itd --privileged -e "container=docker" -p 5123:80 centos_nginx /usr/sbin/init

###進入容器
docker exec -it fcc985ebf0fc bash

###啓動nginx
systemctl start nginx

退出該容器:exit
測試: curl 127.0.0.1:5123

2、配置橋接網絡
爲了使本地網絡中的機器和Docker容器更方便的通信,我們經常會有將Docker容器配置到和主機同一網段的需求。

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-br0
vim ifcfg-ens33 //增加BRIDGE=br0,
###刪除IPADDR,NETMASK,GATEWAY,DNS1

vi ifcfg-br0
###修改DEVICE爲br0,Type爲Bridge,把eth0的網絡設置設置到這裏來
systemctl restart network

安裝pipwork
git clone https://github.com/jpetazzo/pipework
cp pipework/pipework /usr/local/bin/
開啓一個容器
docker run -itd --net=none --name test centos_with_nettool bash
pipework br0 test 172.7.15.201/[email protected] #201爲容器的ip,@後面的ip爲網關ip

docker exec -it test bash

#進去後ifconfig查看就可以看到新添加的ip

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章