在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
这样的保留字。