8

I am following this tutorial for service discovery http://jasonwilder.com/blog/2014/07/15/docker-service-discovery

Briefly:

I created an etcd host running at x.y.z.d:4001

docker run -d --name etcd -p 4001:4001 -p 7001:7001 coreos/etcd

Created a backend server running a container at backend_serverip:8000 and docker-register

$ docker run -d -p 8000:8000 --name whoami -t jwilder/whoami
$ docker run --name docker-register -d -e HOST_IP=$(hostname --all-ip-addresses | awk '{print $1}') -e ETCD_HOST=x.y.z.d:4001 -v /var/run/docker.sock:/var/run/docker.sock -t jwilder/docker-register

Created another backend server running a container at backend2_serverip:8000 and docker-register

 $ docker run -d -p 8000:8000 --name whoami -t jwilder/whoami
 $ docker run --name docker-register -d -e HOST_IP=$(hostname --all-ip-addresses | awk '{print $1}') -e ETCD_HOST=x.y.z.d:4001 -v /var/run/docker.sock:/var/run/docker.sock -t jwilder/docker-register

Created a client running docker-discover and an ubuntu image

$ docker run -d --net host --name docker-discover -e ETCD_HOST=10.170.71.226:4001 -p 127.0.0.1:1936:1936 -t jwilder/docker-discover

When I look at the logs to see if containers are being registered I see teh folowing error

2015/07/09 19:28:00 error running notify command: python /tmp/register.py, exit status 1
2015/07/09 19:28:00 Traceback (most recent call last):
 File "/tmp/register.py", line 22, in <module>
backends = client.read("/backends")
 File "/usr/local/lib/python2.7/dist-packages/etcd/client.py", line 347, in read
self.key_endpoint + key, self._MGET, params=params, timeout=timeout)
  File "/usr/local/lib/python2.7/dist-packages/etcd/client.py", line 587, in api_execute
return self._handle_server_response(response)
  File "/usr/local/lib/python2.7/dist-packages/etcd/client.py", line 603, in _handle_ser
etcd.EtcdError.handle(**r)
  File "/usr/local/lib/python2.7/dist-packages/etcd/__init__.py", line 184, in handle
raise exc(msg, payload)
etcd.EtcdKeyNotFound: Key not found : /backends

I tried manually creating this directory , I also tried running the containers with privileged option but no luck

user_mda
  • 12,733
  • 17
  • 62
  • 111

1 Answers1

4

The error you are getting is from a bug in the code. The problem is that /backends does not exist in your etcd directory. You can create it yourself by manually by running this:

curl -L http://127.0.0.1:4001/v2/keys/backends -XPUT -d dir=true

Once the directory exists in etcd, you won't get the error anymore.

I created a pull request that fixes the bug and if you want to use the fixed code, you can build your own image:

git clone git@github.com:rca/docker-register.git
cd docker-register
docker build -t docker-register .

Then your command for docker register would look like:

$ docker run --name docker-register -d -e HOST_IP=$(hostname --all-ip-addresses | awk '{print $1}') -e ETCD_HOST=x.y.z.d:4001 -v /var/run/docker.sock:/var/run/docker.sock -t docker-register

Note I simply removed jwilder/ from the image name in the command so it uses your local version.

berto
  • 7,491
  • 4
  • 22
  • 19