赞
踩
在启动容器时,如果不配置宿主机器与虚拟机的端口映射,外部程序是无法访问虚拟机的,因为没有端口。
实现外界和Docker容器进行通讯,要么做link要么做Port映射
端口映射:
docker指令:docker run -p ip:hostPort:containerPort redis
使用-p参数会分配宿主机的端口映射到虚拟机。
IP表示主机的IP地址。
hostPort表示宿主机的端口。
containerPort表示虚拟机的端口。
支持的格式有三种:
ip:hostPort:containerPort:映射指定地址的指定端口到虚拟机的指定端口(不常用)
如:127.0.0.1:3306:3306,映射本机的3306端口到虚拟机的3306端口。
ip::containerPort:映射指定地址的任意端口到虚拟机的指定端口。(不常用)
如:127.0.0.1::3306,映射本机的3306端口到虚拟机的3306端口。
hostPort:containerPort:映射本机的指定端口到虚拟机的指定端口。(常用)
如:3306:3306,映射本机的3306端口到虚拟机的3306端口。
如何查看是否映射成功?
使用docker ps
命令查看
出现6379/tcp的表示宿主机并没有打开与虚拟机的端口映射。
出现0.0.0.0:3306->3306/tcp表示宿主机的3306端口映射到了虚拟机的3306端口。
也可以使用docker port NAME
查看端口映射情况。
表示虚拟机的3306端口映射到了主机的3306端口。
如果没有任何回复,表示端口映射失败。
多端口映射:
Dockerfile EXPOSE的用法,然后做一个多端口随机映射的实例
格式为:
EXPOSE PORT
Dockerfile 举例:
- # Tomcat
- # Version 0.0.1
-
- # GET_IMAGE
- FROM 192.168.0.216:5000/centos
-
- # MAINTAINER_INFO
- MAINTAINER hongxue hongxue@showjoy.com
-
- RUN yum -y install vim
- RUN yum -y install net-tools
- RUN yum -y install openssh-server
- RUN yum -y install wget curl
-
- # PORT
- EXPOSE 8080
- EXPOSE 22
- EXPOSE 8009
- EXPOSE 8005
- EXPOSE 8443
我在Dockerfile中定义了 tomcat 的四个端口和ssh 22 端口,并且构建该配置档为镜像文件,镜像名为 port_list
- docker build -t port_list .
- docker images | grep port_list
构建成功后运行该 images,注意在容器运行的时候一定要加-P
docker run -d -it -P --name port_list_container port_list
OK,Container已经running,分别映射端口为(22,8005,8009,8443,8080)映射到本机中的(32775,32776,32777,32773,32774)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。