关于Docker端口映射的学习心得

docker run后面带的参数中,-p控制端口暴露,--link建立容器间关联。

问题描述

上周五的时候在docker使用练习的过程中,遇到了一个问题。

运行一个JavaWeb的blog项目,需要用到两个容器,一个是数据库mysql,一个是放了应用war包的tomcat容器。

在这个前提下,我的数据库容器已经启动了,并且使用 -p将端口映射到主机的端口上。在主机可以直接访问到mysql,并且直接在本机运行blog项目可正常运行。
而使用docker运行blog则总是提示数据库连接失败。

原因

因为容器对于主机来说是一个独立的机器,所以容器 -p所暴露的端口是其实是将该容器的端口与主机的端口关联起来,可以理解为,主机访问本地的端口时其实是将请求转发到容器的对应端口了。
在这个前提下,其他容器无法通过localhost直接访问主机端口。

解决方法

为了解决这个问题,可以使用--link建立容器之间的关联,类似做了一个映射,将一个域名映射到对应容器。格式为 --link 容器名称:映射域名
如:
原本配置中的数据库地址为localhost:3306
将其改为mysqldb:3306
mysql容器名称叫blog_db
那么在tomcat容器运行起来的时候,在docker run 后面加入--link blog_db:mysqldb即可。
注意:在映射域名中不能使用localhost这样的保留字。

推荐阅读更多精彩内容