docker网络,docker-compose network问题
作者:罗德斯
docker网络,docker-compose network
单机桥接网络,bridge(Linux)、nat(Windows)
特点:
1.只能在单个docker主机上运行,并且只能与所在docker主机上的容器进行连接。
2.桥接意味着这是802.1.d桥接的一种实现(二层交换机)
Linux主机上:
docker网络由bridge驱动创建,而bridge底层是基于Linux内核中久经考验达15年的Linux bridge技术。
默认的“bridge”网络被映射到内核中为“docker0”的Linux网桥。
本地系统中存在的网桥如下图(需要安装bridge-utils):
docker0对应docker中默认网桥bridge;
网桥未开启STP,并且有容器内部的网桥借口设备接入对应网桥(网桥对应的interfaces下有关联容器网络借口网络)
调整思绪,未完待续。。。。。。
docker-compose 网络
networks: my_network: #网络名称 driver: bridge #桥接模式 attachable:true #允许独立的网络连接到该网络上 persist: #网络名称 external: #使用已存在的网络 name: bridge2 #已创建的网络名
docker-compose network名称定义
docker-compose启动的网络名称:
1、没有自定义网络名
$ cat docker-compose.yaml version: '2' services: zookeeper1: image: zookeeper container_name: zookeeper1 environment: - ZOO_MY_ID=1 - ZOO_SERVERS=server.1=zookeeper1:2888:3888
实际使用的网络是:<当前路径名_default>,如果<当前路径名>太长,会截取前缀部分。
例如当然目录名为testdocker,那么最终生产的网络名为:testdocker_default
$ docker network ls abf87f64de25 testdocker_default bridge local
2、定义后缀
$ cat docker-compose.yaml version: '2' networks: byfn: services: zookeeper1: image: zookeeper container_name: zookeeper1 environment: - ZOO_MY_ID=1 - ZOO_SERVERS=server.1=zookeeper1:2888:3888 networks: - byfn
定义网络名为byfn,那么最终生产的网络名为:<当前路径名_byfn>。
相对于之前没有定义的时候,把default替换成了定义的网络名,同样还是使用路径名作为前缀。
$ docker network ls abf87f64de25 testdocker_byfn bridge local
3、定义前缀
当然使用路径名作为网络名是很不友好的,docker-compose使用环境变量来取代路径名。
设置环境变量:COMPOSE_PROJECT_NAME
$ cat .env COMPOSE_PROJECT_NAME=aaa
这时网络名如下:
$ docker network ls 967ef0d41dd6 aaa_byfn bridge local
所以,docker-compose的网络名的规则是:<COMPOSE_PROJECT_NAME>_<NETWORKS>
1、如果NETWORKS没有定义,那么就是default。
2、如果COMPOSE_PROJECT_NAME,那么就是当前路径名(取前缀)。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。