docker run
docker run 网络相关参数,主要有:
--dns=[] : 为容器设置自定义DNS,可以设置多个
--network="xxx"
'bridge': 创建一个新的网络
'none': 不使用网络
'container:<name|id>': 重用其他容器的网络
'host': 使用容器宿主机的网络
'<network-name>|<network-id>': 使用预先创建的网络
--network-alias=[] : 为容器网络定义一个别名
--add-host="" : 添加容器网络到 /etc/hosts (host:IP)
--mac-address="" : 设置容器网络设备Mac地址
--ip="" : 设置IPV4地址
--ip6="" : 设置IPV6地址
--link-local-ip=[] : 设置多个容器的 link 地址,可以是IPV4 或 IPV6
–dns
docker run -itd --dns ['8.8.8.8', '9.9.9.9'] --network=my-net busybox
–network
在容器启动时,将容器连接到 --network 指定的网络。
docker run -itd --network=my-net busybox
注意:
- –network 指定的网络必须存在,否则会导致容器创建失败,并提示如下错误
docker: Error response from daemon: network net-hello not found.
ERRO[0002] error waiting for container: context canceled
- –network 的位置,必须在镜像名称前面,否则报错
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "--network": executable file not found in $PATH: unknown.
ERRO[0003] error waiting for container: context canceled
在 --network 基础上,可以进一步设置ip地址 --ip 或 --ip6 ,如下所示:
docker run -itd --network=my-net --ip=10.10.9.75 busybox
-
使用bridge模式
原理:该模式下,docker将为容器创建一对 veth 接口,一端在宿主机,并附加到默认的 bridge (通常名称位 docker0 ); 另一端则放到容器内部作为 loopback 接口。最后分配一个ip地址给容器,实现网络通信。
- 这种模式下,容器依赖 bridge 实现和外部通信,多了一次转发,网络性能显然会受到影响。
- 对网络性能敏感的应用,需要慎重评估在这种影响
- 这种模式具有优秀的隔离性,也具有非常好的灵活性。可以实现复杂的集群组网。
- 也是 docker 网络的默认模式。
-
使用host模式
这种模式下,容器拥有主机所有网络设备的使用权限,因为容器时直接使用host主机的网络协议栈。
- 这种模式下网络拥有最好的性能
- 容器对网络性能比较敏感的情况下,建议使用这种模式
- 比如:负载均衡,高性能网络服务器
-
使用 container 模式
docker run -d --name redis example/redis --bind 127.0.0.1 docker run --rm -it --network container:redis example/redis-cli -h 127.0.0.1
-
使用 预定义网络
docker network create -d bridge my-net docker run --network=my-net -itd --name=container3 busybox
–add-host
docker run -it --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts
172.17.0.22 09d03f76bf2c
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
86.75.30.9 db-static
最后一行就是 通过 --add-host db-static:86.75.30.9 加入的
86.75.30.9 db-static