在docker中连接两个容器

创建 Sonarqube 的时候,需要额外创建一个数据库容器比如 Postgres,然而官方却没指明如何连接,且一般生产部署的时候直接 build 成了个 image,没有这种奇怪的问题 简单粗暴式 IP 最简单的方式,也是最不靠谱的。使用 docker 分配给容器的内部 ip。如何查询? # 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 就 gg 传统方式 --link 注意:这个可能在未来的版本被移除 给个官方警告链接,简单来说应该是通过 link 方式连接的两个 container 会共享环境变量,不同应用可能会有冲突。 只能在 docker run 时指定: docker run --link postgres # 设置 alias docker run --link postgres:db 看官方的文档里貌似是说更新 /etc/hosts,例如: 172.17.0.5 6e5cdeb2d300 172.17.0.89 postgres 6e5cdeb2d300 db 网络方式 network docker 里的网络分为很多种,默认的是 bridge,用来连接不同的容器。 跟着官方教程一步一步走,不要太简单。官方提示生产环境最好自己创建一个 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 查启动不了的原因。

Markdown - 语法


JavaScript

上一篇:钢铁是怎样炼成的

下一篇:打酱油

Ctrl + Enter