docker網(wǎng)絡(luò)配置流程
- 準(zhǔn)備工作
- 需要在容器中安裝
net-tools
工具來管理網(wǎng)絡(luò) - 使用docker的默認(rèn)配置啟動一個容器际邻,安裝
net-tools
和network-manager-applet
芯丧。前者是網(wǎng)絡(luò)管理工具,后者是network服務(wù) - 退出容器世曾,把容器創(chuàng)建為一個鏡像
docker commit <容器名><鏡像名>
- 需要在容器中安裝
- 宿主主機(jī)操作
- 修改docker配置文件(
centos
在/etc/docker/daemon.json
)缨恒,添加配置{"bridge": "br0"}
,使用自定義的網(wǎng)橋 - 創(chuàng)建自定義網(wǎng)橋:
brctl addbr br0
- 啟動docker服務(wù)(如果配置好網(wǎng)橋以后再啟動docker轮听,那么docker有可能會修改網(wǎng)橋配置骗露,所以先啟動docker再配置網(wǎng)橋):
systemctl restart docker
- 刪除網(wǎng)絡(luò)接口IP:
ifconfig eth0 0.0.0.0
- 配置網(wǎng)橋IP:
ifconfig br0 10.10.10.111/23
- 添加網(wǎng)絡(luò)接口到網(wǎng)橋:
brctl addif br0 eth0
- 設(shè)置網(wǎng)橋狀態(tài)up:
ifconfig br0 up
- 添加默認(rèn)網(wǎng)關(guān):
route add default gw 10.10.10.1
- 修改docker配置文件(
- 容器中的配置
- 用準(zhǔn)備工作中創(chuàng)建的鏡像啟動一個容器
- 修改默認(rèn)的網(wǎng)關(guān)與宿主網(wǎng)關(guān)一致:
route add default gw 10.10.10.1
- 此時就可以配置
ifcfg-eth0
文件為固定的IP地址了 - 然后重啟
network
服務(wù):systemctl restart network
注意以上啟動容器的時候都要使用提權(quán)的啟動形式,不然的話不能啟動服務(wù)血巍。
docker run --name=<容器名> --privileged -d <鏡像名> /sbin/init
宿主機(jī)部分的配置操作創(chuàng)建為以下腳本
#!/bin/bash
#$1-網(wǎng)橋名稱
#$2-添加到網(wǎng)橋的網(wǎng)絡(luò)接口名
#$3-網(wǎng)橋IP
#$4-系統(tǒng)的默認(rèn)網(wǎng)關(guān)
if [ "$1" != '' ]; then
brctl showstp $1
if [ $? == 0 ] ;then
echo "刪除已經(jīng)存在的網(wǎng)橋"
ifconfig $1 down
brctl delbr $1
fi
echo "添加網(wǎng)橋"
brctl addbr $1
echo "啟動docker服務(wù)"
systemctl restart docker
echo "刪除網(wǎng)絡(luò)接口IP"
ifconfig $2 0.0.0.0
echo "配置網(wǎng)橋IP"
ifconfig $1 $3
echo "添加網(wǎng)絡(luò)接口到網(wǎng)橋"
brctl addif $1 $2
echo "設(shè)置網(wǎng)橋狀態(tài)up"
ifconfig $1 up
echo "添加默認(rèn)網(wǎng)關(guān)"
route add default gw $4
echo "啟動docker完成"
else
echo "docker_start.sh <網(wǎng)橋名稱><添加到網(wǎng)橋的網(wǎng)絡(luò)接口名><網(wǎng)橋IP><系統(tǒng)的默認(rèn)網(wǎng)關(guān)>"
fi