worstcase / blockade

Docker-based utility for testing network failures and partitions in distributed applications

Home Page:http://blockade.readthedocs.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

How to use blockade API inside container

HerculanoGripp opened this issue · comments

Hi guys, first of all thanks for the great tool.

I'm trying to use Blockade in my stack of tests and have some doubts. I have two containers one is server and other one is the client. I'm running my tests in client and in some cases need to change network parameters of server or client container. In documentation tells about Blockade API but i don't know how to use the API inside client container.

See below my setup configuration of blockade.yaml file

  containers:
  server:
    image: ubuntu:trusty
    command: sh -c "/bin/sleep 300000"
    volumes: ".": "/home/server/"
    expose: [80]
    ports: [5000]

  client:
    image: ubuntu:trusty
    command: sh -c "echo $SERVER_PORT_5000_TCP_ADDR ' google.com.br' >> /etc/hosts; ping $SERVER_PORT_5000_TCP_ADDR"
    volumes:
      "/home/user/client_app": "/home/client_app"
    links: ["server"]

  network:
  flaky: 80%
  slow: 75ms 100ms distribution normal

The API is bound to the host, not one of the containers. So if you want to access it from a container, you'll need to know an IP address or hostname for the host. This is more complicated than it should be and I think it can even vary depending on whether you are using Docker for Mac/Windows versus from Linux directly. Here is is a blog post and sample code you could use to do this:
https://dev.to/bufferings/access-host-from-a-docker-container-4099
https://github.com/bufferings/docker-access-host

Once you figure out the hostname, you should be able to directly connect to the Blockade API port on that hostname (default: 5000). I hope this helps!