![0df119f0fcb5bcdeb213f13140dd33f4.png](https://i-blog.csdnimg.cn/blog_migrate/7ba4978d0963b5b7e9fd25a95a8100ac.jpeg)
作者:程序员的时光
思维导图:
![d4274d84b14073894cb0bda9d15105e1.png](https://i-blog.csdnimg.cn/blog_migrate/071ec85ae7716be9bb47e11bb7328a8d.jpeg)
1,Docker映射是什么?
![a35f972ad47d7f1a764aea60412895ff.png](https://i-blog.csdnimg.cn/blog_migrate/c74ba4a56a7ce43fa8ce8e0549bb6f62.jpeg)
容器里面运行着应用,外部需要访问交互,涉及到容器里面的端口和宿主机之间的映射;
通过端口映射,我们就可以从外部访问宿主机的指定端口来访问到容器的应用;
2,如何实现Docker映射?
这里我们以Tomcat为例子,我们看看如何在外部通过Docker端口映射来访问宿主主机里面的Tomca。
2.1,下载tomcat容器镜像
下载镜像:docker pull tomcat:tag,不加版本号的话默认是下载最新版本
![2435ac803c88904425e397d5b393c10b.png](https://i-blog.csdnimg.cn/blog_migrate/bd545823adb00f1c784920258e09dcd4.jpeg)
查看所有镜像:docker images,我这里是已经下载了三个版本的tomcat
2.2,创建并启动tomcat容器
创建启动tomcat容器:docker run --name tomcat1 -d tomcat :latest, 其中-d是表示后台运行容器,tomcat1是容器名称,tomcat :latest是注明版本号
![9c13062f4ec2fbbad33add425700c704.png](https://i-blog.csdnimg.cn/blog_migrate/f47542269cfd2deb6a70696a77962152.jpeg)
查看正在运行的容器:docker ps
![eb57c116e618986eee4908458bf29a72.png](https://i-blog.csdnimg.cn/blog_migrate/47d68f89fa151655d7c07d1f45c5012c.jpeg)
2.3,开放端口映射命令
映射命令:docker run --name 容器名称 -d -p (服务器端口):(Docker端口) image-name
--name:自定义容器名,不指定时,docker会自动生成一个名称
-d:表示后台运行容器
服务器端口:这里的tomcat端口是8080
Docker端口:我们任意设置一个端口号,但是前提是这个端口号不能被占用
image-name:指定运行的镜像名称以及Tag,这里也可以用镜像ID都可以的
![f6883a91e02a140aa95df3fba786529b.png](https://i-blog.csdnimg.cn/blog_migrate/11d0bd0f70fedb2caf5d0e48ae8786a1.jpeg)
这个时候我们的端口以及搭建好了,我们在浏览器中输入服务器ip地址(查看命令:ip addr show)再加上Docker端口就可以访问了。
![853dc3a1ac321d84794154cc017196e9.png](https://i-blog.csdnimg.cn/blog_migrate/428686ef191d36d638b6fc023927672c.jpeg)
结果,就这??
![9a0b41ee5822cddb3c8f6daac75f915a.png](https://i-blog.csdnimg.cn/blog_migrate/4a0c898fe64f0eefc9ae09913c3cc788.jpeg)
2.4,关于访问映射端口出现404问题
这个问题相信刚开始搭建的时候应该都遇到过,我查了一下原因如下:
![aa3008d3e4964d4816883b9308926a85.png](https://i-blog.csdnimg.cn/blog_migrate/6207f5e739b71cfaa86853f3a4a87c4c.jpeg)
解决办法:
我们先进入到tomcat的目录:
![2186ec18f28e67c3efaa916c13c07dfc.png](https://i-blog.csdnimg.cn/blog_migrate/e504703f891d037ff6b84114e6040bce.jpeg)
进入之后,修改webapps为webapps2或者修改webapps.dist为webapps就可以了
![07f7f361ab21432e6b0174e04b5fa502.png](https://i-blog.csdnimg.cn/blog_migrate/238b5a97aa179dbffc4e0de51bcfe407.jpeg)
![59a505cc873585e2a345e5d9bd94f517.png](https://i-blog.csdnimg.cn/blog_migrate/09d9c91387e9312c46035d07a892f1a7.jpeg)
我们先来看看效果:
![8ff3d1ba278382f1fe0eb0ce4e755b75.png](https://i-blog.csdnimg.cn/blog_migrate/3d479514eb964cb383fcfeb186835e98.jpeg)
3,提交运行容器成为镜像
上述运行成功之后,也存在一定问题,如果不退当前容器的情况下,运行端口端口映射的tomcat是可以访问到首页的;但是,我们只是在这个容器中修改了 命名,我们重启了这个容器,修改的命名就会恢复。
为了防止恢复问题,我们自己把修改后的镜像映射成新的镜像
命令:docker commit -a=“作者名” -m=“备注” 运行时容器ID 新镜像名称
![0fef2d5dd574094b3563df8aa0adb70a.png](https://i-blog.csdnimg.cn/blog_migrate/3932ba0f057c14fff5af934d5b4e2191.jpeg)
然后我们就可以用新镜像来重新访问映射端口的应用了
![4d6a976245fbbaa362f2ba111a48321d.png](https://i-blog.csdnimg.cn/blog_migrate/1423bab171a4472f268c047eb04ac65d.jpeg)
非常方便!
- 关注我,助你早日成为全栈工程师。
往期经典 :
基于Springboot的快速入门项目
基于Springboot的权限管理系统
基于Springboot+SpringCloud+Redis+商城系统
基于springboot、springcloud实现java快速开发平台
基于springboot的资源+博客系统发布「原创」【开源】
基于Springboot的迷你商城系统「源码开源」