建立 Sonarqube 的時候,須要額外建立一個數據庫容器好比 Postgres,然而官方卻沒指明如何鏈接,且通常生產部署的時候直接 build 成了個 image,沒有這種奇怪的問題sql
最簡單的方式,也是最不靠譜的。使用 docker 分配給容器的內部 ip。如何查詢?docker
# 1. 查看機器的 hosts 文件
docker exec containerId sh -c "exec cat /etc/hosts"
# 2. 查看容器信息。IPAddress
docker inspect containerId
複製代碼
不靠譜的方式在於,docker 給容器分配的內部 ip 是動態的,下一次啓動可能就變了,鏈接到另外一個容器裏了。gg數據庫
舉個栗子:網絡
c1
再啓動 c2
。c2
的 ip 多是 *.*.0.3
c2
再啓動 c1
。c2
的 ip 多是 *.*.0.2
也就是說,docker 分配的內部 ip 與容器啓動順序有關。萬一啓動順序變了,ip 就 ggdom
--link
注意:這個可能在將來的版本被移除post
給個官方警告連接,簡單來講應該是經過 link
方式鏈接的兩個 container 會共享環境變量,不一樣應用可能會有衝突。ui
只能在 docker run
時指定:url
docker run --link postgres
# 設置 alias
docker run --link postgres:db
複製代碼
看官方的文檔裏貌似是說更新 /etc/hosts
,例如:spa
172.17.0.5 6e5cdeb2d300
172.17.0.89 postgres 6e5cdeb2d300 db
複製代碼
docker 裏的網絡分爲不少種,默認的是 bridge
,用來鏈接不一樣的容器。postgresql
跟着官方教程一步一步走,不要太簡單。官方提示生產環境最好本身建立一個 bridge
,多是默認的連太多了吧。。。
發現用默認的 network ping
ip 能通,容器名不行:
docker attach sonar
# root@6e5cdeb2d300: /
ping -c 2 172.17.0.2 # 能通
ping -c 4 posgres # 不能解析主機
複製代碼
只能自定義個:
docker network create --driver bridge sonar
複製代碼
使用超雞簡單:
docker run --network sonar
# 你甚至能在 run 命令以後使用
docker network connect sonar
複製代碼
鏈接的時候,容器名就是 domin。
docker run -e sonar.jdbc.url=jdbc:postgresql://db/sonar
複製代碼
開心地連上了!以後啓動也方便多了,不用每次 docker logs
查啓動不了的緣由。