一、 网络启动过程
docker服务启动时会先在宿主机上创建一个虚拟网桥(docker0),同时随机分配一个未被占用的私有网段(例如172.17.0.0/16)给该虚拟网桥,会给此后启动的容器自动分配该网段内的ip地址。
当创建容器时,会同时创建一对veth pair互联端口(容器内:eth0,宿主机docker0网桥:veth XXX),当向任意一个端口发送包时,另一个端口也自动接收相同的包。通过这种形式实现宿主机2容器,容器2容器实现互相通信。
二、 修改容器dns和主机名
① 临时处理(容器终止或重启后不会保存)
# /etc/resolv.conf 容器启动时,会复制宿主机上的该文件,并删掉无法连接到的dns服务器
vim /etc/resolv.conf
vim /etc/hosts
② 通过参数指定
创建或启动容器时使用参数指定,不推荐与-net=host 一起使用,这样会破坏宿主机上的配置信息
# --hostname=HOSTNAME 设置容器主机名,写入容器的/etc/hosts和/etc/hostname中,容器外部不可见(比如 docker container ps -a)
# --link=CONTAINER_NAME:ALTAS 记录其他容器的主机名,这样新建容器可以直接使用主机名与所连接容器通信
# --dns=IP_ADDRESS 指定dns服务器,写入容器的/etc/resolv.conf
# --dns-option list 指定dns相关选项
# --dns-search=DOMAIN 指定dns搜索域