Software-Defined Networking for Linux Containers(SDN).
Pipework是一个Docker网络配置工具,由200多行shell实现, 来帮助你自动打通容器之间的网络连接,pipework允许你在一个复杂的环境下把容器连接在一起,pipework使用cgroup和namespace来和LXC容器协同工作,当然也可以和docker来一起工作。
Docker 创建容器时,默认模式是 Bridge 模式。但是这个 Bridge 模式仅限于本机的 docker0,而不是像 VMware 虚拟机的 Bridge 模式一样可以得到主机所在 LAN 的 IP 地址。
为了让局域网下的其他主机可以直接访问Docker容器,就像访问一台逻辑上的主机一样,无需经过NAT转换和端口映射,此时就需要Pipework进行配置
注:当你在docker中使用pipework之前,先去docker用户列表中询问一下,docker是否已经有了更加原生方法来实现相同的功能,这样你应该不用pipework,pipework后面应该被淘汰的。如果当前版本的docker真的没有办法使你的docker容器集中在一起,那么只能使用pipework了。
安装pipework
git clone https://github.com/jpetazzo/pipework.git
sudo cp -rp pipework/pipework /usr/local/bin/
使用 pipework 配置容器 IP
$ docker run --name ip-test -it --net=none centos /bin/bash
$ export PID=$(docker inspect -f "{.State.Pid}}" ip-test)
echo ${PID}
$ ln -s /proc/${PID}/ns/net/ /var/run/netns/${PID}
$ ip netns list
$ brctl addbr bridge-test
$ brctl show
$ ifconfig bridge-test 192.168.9.200 netmask 255.255.255.0 up
$ ip link add veth[Bridge] type veth peer name veth[Container_id]
$ brctl addif bridge-test veth[Bridge]
$ ifconfig veth[Bridge] up
$ ip link set vethContainer netns ${PID}
$ ip netns exec ${PID} ifconfig vethContainer 192.168.9.10 netmask 255.255.255.0
$ ip netns exec ${PID} /etc/init.d/networking restart
$ ifconfig -a
方式二:Docker内嵌支持配置静态 IP
创建自定义网络
docker network create -d bridge –subnet=172.18.0.0/16 –gateway=172.18.0.1 docker-br1
注:docker-br1 为自定义网桥的名字
查看所有docker网络
docker network ls
为容器设置静态IP
docker run –name ip0 -it –net docker-br1 –ip 172.18.0.2 centos /bin/bash
进入容器后,输入ifconfig查看IP
查看容器IP
方式一:docker inspect $(docker ps -q) | grep IPAddress
方式二:docker inspect –format=“{{.Name}}: {{.NetworkSettings.IPAddress}}” $(docker ps -q)
See Also
Thanks to the authors 🙂
Pipework
Github首页
通过 pipework 让 Docker 容器处于主机所在 LAN
使用pipework将Docker容器配置到本地网络环境中
使用pipework桥接docker
Docker网络详解及pipework源码解读与实践
Docker内置方式
Docker container networking
Docker静态IP设置
为Docker容器指定自定义网段的固定IP/静态IP地址
–net=none 自定义网络方式
为Docker容器分配静态IP
Docker中使用固定IP
docker容器分配静态IP