Docker容器在启动的时候默认是会有一块网卡的,但是在很多场景下,容器仅仅有一块网卡是不够的,而且,我们对于docker网卡的地址也有一些要求,那么这个时候就需要我们对容器进行添加网卡,并配置IP地址。
【Docker有关于网络配置的命令】
docker network create #创建一个网络将容器连接到网络
docker network connect #将容器连接到网络
docker network disconnect #断开容器的网络
docker network inspect #显示一个或多个网络的详细信息
docker network ls #列出网络
docker network prune #删除所有未使用的网络
docker network rm #删除一个或多个网络
【解决方案】
1、新建docker虚拟网卡
#新建默认IP地址段的网络
docker network create --driver bridge <网卡名称>
e.g:docker network create --driver bridge mynet1
#新建自定义IP段的网络
docker network create --driver bridge --subnet <IP段> --gateway <网关> <网卡名称>
e.g:docker network create --driver bridge --subnet 192.168.100.0/24 --gatway 192.168.100.1 mynet2
2、为容器添加网卡
#创建容器时添加
docker run -itd -p 80:80 --network mynet1 php:5.6.36-apache #随机分配IP地址
docker run -itd -p 80:80 --network mynet2 --ip 192.168.100.8 php:5.6.36-apache #指定IP地址
#容器已经创建,追加一块网卡
docker network connect mynet2 <容器id>
e.g:docker network connect mynet2 2b6c292e0420
那么通过上面的命令进行操作,我们便可以进行自定义网卡,并且为docker容器进行网络及网络IP地址的配置。
命令详细参数,请参见:
docker network命令详解
使用端口映射(NAT)的方式存在一个弊端,当多个
容器
都需要使用某个端口时或者host主机端口与
容器
端口冲突时(例如,host主机搭建了80的服务,两个
容器
也都搭建了80的服务,那个只有1个服务可以使用本机的80端口,其他服务都要映射为其他端口)
为
容器
配置
独立的桥接IP就完美的解决了这个问题。以下为
配置
步骤:
1、可以查看默认的
docker
0
网卡
的IP:
可以看到,是一个虚拟的IP地址172.17.42.1。
接下来开始
配置
,首先停止
docker
服务:
/etc/init.d/
docker
stop
接着停止
docker
0
网卡
:
ifconfig
docker
0 down
③virbr0:
在CentOS7的安装过程中如果有选择相关虚拟化的的服务安装系统后,启动
网卡
时会发现有一个以网桥连接的私网地址的virbr0
网卡
(virbr0
网卡
:它还有一个固定的默认IP地址192.168.122.1),是做虚拟机网桥的使用的,其作用是为连接其上的虚机
网卡
提供 NAT访问外网的功能。
我们之前学习Linux安装,勾选安装系统的时候附带了libvirt服务才会生成的一个东西
需要
容器
镜像busybox
作者的
容器
使用的是国内加速源daocloud 所以,镜像名称为daocloud.io/library/registry:2.6.1
根据先前的私有仓库得知,daocloud.io/library/registry:2.6.1是共有仓库
# 先创建两个虚拟
网卡
docker
network create --driver br...
我们在使用
docker
run创建
Docker
容器
时,可以用--net选项指定
容器
的网络模式,
Docker
有以下4种网络模式:
host模式,使用--net=host指定。
container模式,使用--net=container:NAME_or_ID指定。
none模式,使用--net=none指定。
bridge模式,使用--net=...
ip link add br0 type bridge #对应的删除命令ip link delete br0
2. 添加
网卡
eth0至网桥br0(需要清除eth0原有ip地址),亦可不添加物理网口,根据自己需要
ip link set eth0 master br0 #对应的删除命令ip link set eth0 nomaster
3. 启动
容器
要获取
Docker
容器
的网络地址,可以使用
docker
-compose工具来操作。
docker
-compose是一个用于定义和运行多
容器
Docker
应用程序的工具,它通过一个YAML文件来
配置
应用程序的服务。
要获取
容器
的网络地址,需要按照以下步骤进行操作:
1. 在
docker
-compose.yml文件中定义服务:
services:
my_service:
image: my_image
这里的my_service是你要获取网络地址的
容器
的名称,my_image是你所使用的
容器
镜像。
2. 运行
docker
-compose up命令启动服务:
$
docker
-compose up -d
3. 运行
docker
inspect命令获取
容器
的网络信息:
$
docker
inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <
容器
名称或ID>
将<
容器
名称或ID>替换为你要获取网络地址的
容器
的名称或ID。
4. 通过上述命令,你将获取到
容器
的网络地址。
注意事项:
- 确保你已经安装了
Docker
和
docker
-compose工具。
- 你可以使用其他
Docker
命令来检查
容器
的网络设置。
- 你可以根据需要在
docker
-compose.yml文件中定义多个服务,并使用上述方法获取每个
容器
的网络地址。