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