關于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這樣的保留字。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容