Docker:网络配置

Docker运行容器时,一个常见的问题是:localhost(127.0.0.1)指向哪里?这涉及到Docker的网络配置问题。

Docker支持的网络模式如下:bridge(默认)、host、container、network-name、none。

桥接 bridge

Docker 默认的网络模式是 bridge 。在该模式下,docker 创建了一个 bridge,名称通常为 docker0
可以用ifconfig来查看:

1
2
3
4
5
6
7
docker0   Link encap:Ethernet  HWaddr **:**:**:**:**:**
inet addr:192.168.0.1 Bcast:0.0.0.0 Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:305002 errors:0 dropped:0 overruns:0 frame:0
TX packets:407006 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:30331811 (30.3 MB) TX bytes:752905683 (752.9 MB)

宿主机和容器通过bridge进行通信,如图所示:

docker桥接bridge模式

容器内的localhost指向容器内部。

本机 host

当使用 --net=host启动容器时,网络配置为 host 模式。该模式下,容器和宿主机共享网络。形象地讲,容器和宿主机共享一个网卡,在容器内的网络访问如同直接在宿主机上操作一样。例如:

1
docker run --rm -it --net=host ubuntu:trusty bash

容器内的localhost指向宿主机。
docker桥接host模式

container

Docker可以指定一个容器复用另一个容器的网络设置。这种模式适用于由多个容器搭建整套系统的情况,例如搭建PHP开发环境时,希望Mysql、Redis都使用PHP容器的网络配置,即可以使用该模式。

network-name

Docker允许用户使用Docker network driver或[第三方network driver插件](https://docs.docker.com/engine/extend/legacy_plugins/#network-plugins)创建自定义网络,然后多个容器都可以使用相同的网络。常见的第三方etwork driver插件有:Contiv NetworkingKuryr Network PluginWeave Network Plugin

none

顾名思义,该模式下没有网络连接。例如我的宿主机ip为192.168.0.59,在容器内访问宿主机就提示无网络。

1
2
3
docker run -it --net=none my_ubuntu bash
root@6533968160dd:/# ping 192.168.0.59
connect: Network is unreachable
作者

David

发布于

2017-03-20

更新于

2023-10-22

许可协议

# 相关文章
  1.Docker:基本概念
评论

:D 一言句子获取中...