三、端口映射:
当创建nginx镜像时,并且启动nginx时,只能在容器内部区访问nginx的网址.为了容器之外能访问,需要暴露端口,即将容器内部的端口映射出去.
真实机A上跑了一个台虚拟机vagrant(192.168.205.10 B)中启动一台nginx容器(172.17.0.2 C).
- B在vagrant宿主机中可以ping通容器中C的ip,即B -> C ok.
- C在容器中也可以ping通vagrant宿主机B的ip,即B -> A ok.
- 真实机A可以ping通B的ip,但是ping不通C容器中的ip,即A -> B ok,A -> C ng.
1. 运行一个nginx提供web服务:
$ docker run -d --name web nginx
$ docker exec web ip a # 命令使用不了,最小安装,以下方式获得ip
OCI runtime exec failed: exec failed: container_linux.go:345:
starting container process caused "exec: \"ip\":
executable file not found in $PATH": unknown
$ docker inspect bridge
"Containers": {
"0cad3a7cf5c0f77......": {
"Name": "web",
"IPv4Address": "172.17.0.2/16",
}
}
# 宿主机操作
$ ping 172.17.0.2 # 可以通,因为有docker0网桥
$ telnet 172.17.0.2 80 # 成功,显示Connected
$ curl 172.17.0.2 # 成功,访问到nginx welcome
$ ping 192.168.205.10 # 可以通
$ curl 192.168.205.10 # 不成功
$ curl 127.0.0.1 # 不成功
# 真实机操作
$ curl 192.168.205.10
说明: ①. nginx是一个独立的namesapce空间,它只绑定到了172.17.0.2这个网络空间中. ②. 在宿主机是可以提供web服务的,但是需要给外面提供服务的.