一. 宿主机端口映射访问容器
1.1 使用 -P 随机映射一个端口至容器内部开放的网络端口
使用 -P 创建端口映射时,将容器的8080端口随机地映射到了宿主机的32769端口,可以使用 docker port container 查看端口映射情况:
此时,我们在浏览器中访问 http://192.168.255.128:32769/ 时,可能出现404错误,原因多半是因为 webapps 目录为空造成的,可以进入容器,将 webapps.dist 文件夹下的内容复制到给 webapps 文件夹:
查看容器日志 docker logs tomcat01 ,新增如下日志:
此时再访问 http://192.168.255.128:32769/ 即可看到我们熟悉的界面:
最后,我们将修改后的容器提交为一个新的镜像:
1.2 使用 -p 可以指定映射的IP、端口、TCP/UDP协议类型
lsof -i :8080 查看宿主机8080端口的使用情况,发现8080端口尚未被使用,因此启动tomcat02,并将宿主机的8080端口映射到容器的8080端口,由于此处指定了宿主机IP地址为127.0.0.1,因此只能在本机访问:
不指定IP时,默认为0.0.0.0:
注:同创建数据卷的 -v 一样,-p也可以多次指定,来创建多组映射
二. 容器互联通信
2.1 借助 docker0 网桥,同一个宿主机上的各个容器都是可以PING通的
网桥用以实现不同网段之间的通信,在宿主机上运行 ifconfig 可以查看网桥。docker0 网桥的一端是宿主机,另一端是运行在操作系统中的各个Docker实例(即容器)。借助 Docker0 网桥,我们可以实现容器和宿主机的通信。
ipconfig 可以查看 docker0 网桥的IP为 172.17.0.1,因此推断Docker中的各个容器也都是位于172.17网段的。
由于所有容器同属一个网段,因此同一宿主机的不同容器间天生可以通信:
借助 docker0 网桥,容器也可以PING通宿主机:
2.2 使用 --link 建立容器之间的通信
使用 --link CONTAINER-NAME:别名 (通常别名和 CONTAINER-NAME 一致)参数时,新创建的容器中将会添加 link 容器的环境变量,主机映射中也会增加 link 容器的别名。
创建和运行容器 tomcat01 ,创建和运行容器 tomcat02 时,将其 --link 参数设置为 tomcat01:tomcat01:
进入 tomcat02 容器,查看 /etc/hosts 中的IP和域名的映射:
通过 env 指令查看 tomcat02 环境变量: