在Docker中,总共有3种网络模式,通过以下命令查看:
$ sudo docker network list
NETWORK ID NAME DRIVER SCOPE
4d8410464028 bridge bridge local
64c12c1db079 host host local
859695aea76e none null local
bridge:网桥模式。宿主机会充当网桥,充当容器的网关,每个容器都有一个独立的IP地址。容器之间,容器与宿主机之间的通信,都需要通过宿主机的docker0网桥来实现。DHCP/路由

通过命令docker inspect [container] 即可查看容器的网络信息。
host:主机模式。容器没有独立的IP地址,用的都是宿主机的IP地址,容器就相当于只是宿主机的一个进程。

none:none模式。代表容器没有网络,容器和容器之间,容器和宿主机之间没法通过网络进行通信。
容器运行后,默认用的是网桥模式。而网桥模式下,每个容器都有自己独立的IP地址,所以外部服务没法直接访问到容器中的某个服务,所以需要使用端口映射,将宿主机的某个端口与容器中的某个端口进行映射,在外部服务访问宿主机的某个端口(比如3306)时,通过端口转发到容器的某个端口(比如3306)。命令格式为:
$ docker run -d -p [宿主机端口]:[容器端口] --name [container name] [image]
比如我们将宿主机的8000端口,与容器的80端口映射,命令如下:
# 只映射一个端口
$ docker run -d -p 8000:80 --name mynginx nginx
# 映射多个端口
$ docker run -d -p 8000:80 -p 5000:443 --name mynginx nginx

还有另外一种映射的参数-P ,是将容器中使用expose暴露的端口在宿主机上采用一个随机端口与之映射,这种映射方式在实际工作中用得比较少。