建立 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
查启动不了的缘由。