越是好玩的东西,越能轻而易举的发现BUG,在此之前你可能没曾想到,这么高端大气上档次的东西会有这么明显的BUG,然后检查自己的缘故。我使劲的折腾啊折腾,终于发现问题原来如此简单,使用Docker Compose编排容器(Container)的时候,发现不能在/etc/hosts自动创建容器间的链接。

测试过版本:v1.15.0、v1.8.0。在GitHub的Issues上发现类似问题(链接)。

正如去年玩VestaCP的时候,就发现几个BUG,可把我给折腾好几个小时的。

值得注意的是,似乎并不是所有的docker-compose.yml会出现这个问题。

例如下面这个docker-compose.yml

version: "2"
services:
  my-wpdb:
    image: mariadb
    volumes:
      - ./db-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: ChangeMeIfYouWant
  my-wp:
    image: wordpress
    volumes:
      - ./web:/var/www/html
    ports:
      - "8080:80"
    links:
      - my-wpdb:mysql
    environment:
      WORDPRESS_DB_PASSWORD: ChangeMeIfYouWant

至少使用起来是没什么问题的。

但是当我使用命令docker exec wordpress_my-wp_1 cat /etc/hosts查看hosts文件的时候,缺发现少了些个东西啊!

链接没有被创建?

2017-08-10_000827.png

问题似乎更奇葩了。

得,进入该容器看看:

root@vultr:~/wordpress# docker exec -it wordpress_my-wp_1 /bin/bash
root@f63de8fd91d9:/var/www/html# ping mysql
PING mysql (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.115 ms
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.117 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.083 ms
64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.092 ms
^C--- mysql ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.083/0.102/0.117/0.000 ms
root@f63de8fd91d9:/var/www/html#

奇怪了,为啥在/etc/hosts中看不到172.18.0.2 mysql

脑子有点不够用,算了,回头再折腾。