docker-compose容器间的通讯之link篇

容器之间的通讯有几种。

1 通过端口。

比如,php fpm容器通过暴露9000端口,nginx利用该端口,把php交给fpm容器

再复杂一点,还可以通过配置虚拟网络的。让不同的服务运行在不同的ip的端口上。

2. 通过link
更简单的方法是通过link。当一个容器需要另外一个容器的是时候,只要在docker-compse.yml文件里写上link 服务名service : 别名alias 即可。在该容器内,这个 service(或者别名)就是指向另外的容器的。

例子

比如有2个容器,php容器和db容器。php容器需要访问db,发现通过127.0.0.1这样的并不可以。因为,db是运行在另外一个容器内的,127.0.0.1则是本php容器。而非db容器- 通过expose暴露的端口也仅仅是暴露给宿主,而不是其他容器。这样只要在php容器的配置加上link:

php:
    ....
    links:
      - "mysql"

mysql:
    ....

然后在 php 的配置里,链接数据库只要写 mysql 即可

DATABASE_URL="mysqli://user:user@mysql:3306/user-db?serverVersion=5.7"

进入php容器查看ping mysql,会发现docker已经把mysql这个写入了类似hosts文件的地方。具体哪我也不知道。