How do links and scaling work together in docker compose?

First of all I would clarify that, by default, with or without linking a container with other, all container has visibility to other containers running in the same host (using the container IP). You can change this behavior using the icc=true flag in docker daemon.

In respect of the links with docker-compose, these are generated when the container with the links are created. Let’s see it with an example. Using this docker-compose.yml

web:
  build: .
  command: python app.py
  ports:
   - "5000:5000"
  volumes:
   - .:/code
  links:
   - redis
redis:
  image: redis

After running docker-compose up -d the web_1 container is linked with the container with redis_1:

        (...)
        "Links": [
        "/compose_redis_1:/compose_web_1/compose_redis_1",
        "/compose_redis_1:/compose_web_1/redis",
        "/compose_redis_1:/compose_web_1/redis_1"
    ], (...)

Now we want to scale the redis service using docker-compose scale redis=2. After running it (and create a new container redis_2), the links in web_1 keeps unchanged.

        (...)
        "Links": [
        "/compose_redis_1:/compose_web_1/compose_redis_1",
        "/compose_redis_1:/compose_web_1/redis",
        "/compose_redis_1:/compose_web_1/redis_1"
    ], (...)

It is needed to stop, remove and run web_1 to see these links created:

docker-compose stop web
docker-compose rm web
docker-compose run -d web
docker inspect compose_web_run_2
(...)        "Links": [
        "/compose_redis_1:/compose_web_run_2/compose_redis_1",
        "/compose_redis_2:/compose_web_run_2/compose_redis_2",
        "/compose_redis_1:/compose_web_run_2/redis",
        "/compose_redis_1:/compose_web_run_2/redis_1",
        "/compose_redis_2:/compose_web_run_2/redis_2"
    ],(...)

And the /etc/hosts of web_1 container:

172.17.0.24 7be2dabea910
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.21 compose_redis_1 8a1297a5b3e4
172.17.0.23 compose_redis_2 069dd46836aa
172.17.0.21 redis 8a1297a5b3e4 compose_redis_1
172.17.0.21 redis_1 8a1297a5b3e4 compose_redis_1
172.17.0.23 redis_2 069dd46836aa compose_redis_2

So to generate the new links, you is is needed to stop, remove, and run again the container.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)