docker--端口映射
时间:2020-04-21
本文章向大家介绍docker--端口映射,主要包括docker--端口映射使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
端口映射
#查看容器端口映射信息
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4d7e7115dc9 nginx:latest "nginx -g 'daemon of…" 3 days ago Up 20 minutes 80/tcp nginx-test [root@localhost ~]# docker inspect d4d7e7115dc9
#获取到ip地址
未做端口映射之前外部无法访问
#无法访问
[root@localhost ~]# curl 172.17.0.1 curl: (7) Failed connect to 172.17.0.1:80; Connection refused [root@localhost ~]#
端口映射实现了外部环境访问容器内部:
-
第一类:把容器的端口随机映射为物理机的一个端口
0.0.0.0:是本机的ip
32768:是本机的端口
80:是容器的端口
使用-P选项是把容器内使用expose的端口都映射为物理机的同一个端口
[root@localhost ~]# docker run -d -P nginx#大写的P,随机映射为物理机的端口 81d654f4fda113aab1a2ff750f27fc760bc0ea895023f0b064084ad8ec97d8e2 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 81d654f4fda1 nginx "nginx -g 'daemon of…" 27 seconds ago Up 25 seconds 0.0.0.0:32768->80/tcp elated_bouman d4d7e7115dc9 nginx:latest "nginx -g 'daemon of…" 3 days ago Up 29 minutes 80/tcp nginx-test [root@localhost ~]# ss -tnl#物理机启动了相应的二端口 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 80 :::3306 :::* LISTEN 0 128 :::22 :::* LISTEN 0 128 :::32768 :::* #也可以查看端口映射信息 [root@localhost ~]# docker port 81d654f4fda1 80/tcp -> 0.0.0.0:32768
外部访问:
-
第二类:把容器的端口映射为物理机特定的一个端口
用小写的p
[root@localhost ~]# docker run -d -p 22:80 nginx #小写的p,22是物理机的端口,80是容器的端口,如果映射的物理机端口被占用了会报错 adb509ee2eb40a5544c147f976ef020de7c31a7c966acd76094ba5328c9d2985 docker: Error response from daemon: driver failed programming external connectivity on endpoint frosty_wiles (f196cc4ff580eb2e39aab714ee0299576364b110fce7c0f27dfcb0f8b51f8d35): Error starting userland proxy: listen tcp 0.0.0.0:22: bind: address already in use. [root@localhost ~]# docker run -d -p 80:80 nginx #指定特定端口,第一个80是物理机的端口,第二个是物理机的端口 cced033e1b8b51d2557e54cbcdad1a3df3f5e2a5533dbf4118464ab96bec7583 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cced033e1b8b nginx "nginx -g 'daemon of…" 15 seconds ago Up 14 seconds 0.0.0.0:80->80/tcp kind_neumann 81d654f4fda1 nginx "nginx -g 'daemon of…" 12 minutes ago Up 12 minutes 0.0.0.0:32768->80/tcp elated_bouman d4d7e7115dc9 nginx:latest "nginx -g 'daemon of…" 3 days ago Up 41 minutes 80/tcp nginx-test [root@localhost ~]# docker port cced033e1b8b 80/tcp -> 0.0.0.0:80
-
第三类:把容器端口映射为特定网卡上的随机端口
1,在虚拟机上添加网卡(我这里还是用的本虚拟机没有添加,可以添加一下效果更明显)
[root@localhost ~]# docker run -d -p 192.168.10.111::80 nginx#小写的p,把容器的80端口随机映射为192.168.10.111上的随机端口,ip冒号后面没有写的端口号表示随机映射 2fd41e5658208030a2c6f7fc127f21cc650c4aeb83277d5255308750c5280283 [root@localhost ~]# docker port 2fd41e5658208030a2c 80/tcp -> 192.168.10.111:32769 [root@localhost ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 128 192.168.10.111:32769 *:* LISTEN 0 80 :::3306 :::* LISTEN 0 128 :::80 :::* LISTEN 0 128 :::22 :::* LISTEN 0 128 :::32768 :::*
外部访问:
-
第四类:把容器端口映射为特定网卡上的特定端口
[root@localhost ~]# docker run -d -p 192.168.10.111:81:80 nginx#把容器的80端口随机映射为192.168.10.111上的81端口 ddaee9efbcf68f055b60730671ffa907de086cf8cbe2b28441d51c4797f8fd72 [root@localhost ~]# docker port ddaee9efbcf68f055b60 80/tcp -> 192.168.10.111:81 [root@localhost ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 192.168.10.111:81 *:* LISTEN 0 128 *:22 *:* LISTEN 0 128 192.168.10.111:32769 *:* LISTEN 0 80 :::3306 :::* LISTEN 0 128 :::80 :::* LISTEN 0 128 :::22 :::* LISTEN 0 128 :::32768 :::*
访问:
总结:
1 在端口映射中使用到了两个选项,
一个是大写的P,表示把容器暴露的端口随机映射为物理机上的一个端口,不能指定特定网卡
2 另外一个是小写的p,可以把容器暴露的端口映射为物理机特定的端口,或者元素为物理机特定网卡上的随机端口或者特定网卡上的特定端口
镜像分类:
1 工具类的镜像:busybox,启动工具类进行是使用交互模式docker run-it来启动
2 服务类镜像:nginx,启动服务类镜像使用的docker -d来启动,后台运行
原文地址:https://www.cnblogs.com/wenm1128/p/12739186.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法