一.引子
我们知道,默认情况下Docker创建容器分配的IP都是随机的,甚至有些情况下是啥Host网络之类的,除非进行端口映射,不然你都没办法访问到容器内的服务,这就对我们的某些需求很不利。比如,WordPress博客可以使用Redis进行加速,那么我创建Redis容器之后会面临一个尴尬的局面,就是要暴露端口,然后要么就需要配置密码,要么就是不设密码,但是必须用iptables阻断分配端口的外网访问防止被人日了。
二.解
后来我才发现了映射ip能绑定127.0.0.1,然而,还是不能搞清楚怎么样直接用宿主机访问容器的IP (其实就是懒,我这人反正基本上需要啥就研究啥,用不着就没动力去研究)。今天正好又碰到了这个需求,所以研究了下,发现有竟然有这个操作。下面来介绍一下
关于Docker的几种网络我就不说了,反正百度都能搜到一堆
#这个默认是创建Bridge的,如果你需要bridge的网卡不是第一张(eth0啥的),请使用-o parent=eth1 来指定你的网卡,也能额外用--internal来限制可能的外网访问 docker network create --subnet=192.168.1.0/24 --gateway=192.168.1.1 docker-intranet #然后docker run的时候就能够指定这个网络了(需要注意的是--ip参数在1.9版本docker中没有,1.13是有的) docker run -d --net=docker-intranet --ip=192.168.1.2 centos:6.9 /bin/bash
当然,这儿也能够再用-p来映射端口,并不影响
这样你就能在机器内看到ip为192.168.1.1的设备了,同时ping你的容器ip也能通了
PS.如果需要全映射请参照如下命令来nat一波
iptables -t nat -I POSTROUTING -o eth0 -d 0.0.0.0/0 -s 192.168.1.2 -j SNAT --to-source 1.2.3.4
文章评论