2015-07-07 13 views
8

ich dieses Tutorial folgenden bin für Service Discovery http://jasonwilder.com/blog/2014/07/15/docker-service-discoveryUnable Docker-Container entdecken

Kurz: 4001

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

Erstellt einen Back-End-Server ein Lauf:

ich einen ETCD Host bei xyzd läuft erstellt Container am backend_serverip: 8000 und 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 

einen anderen Back-End-Server erstellt einen Container an backend2_serverip ausgeführt wird: 8000 und 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 

einen Client Erstellt läuft Docker entdecken und ein ubuntu Bild

$ 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 

Wenn ich die Protokolle zu sehen, ob Behälter eingetragen werden I teh folowing Fehler sehen versucht

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 manuell dieses Verzeichnis erstellen, ich habe auch versucht, die Behälter mit p Lauf Rivaled Option, aber kein Glück

Antwort

4

Der Fehler, den Sie bekommen, ist von einem bug in the code. Das Problem ist, dass /backends nicht in Ihrem etcd-Verzeichnis vorhanden ist. Sie können es selbst manuell erstellen diese durch Ausführen von:

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

Sobald das Verzeichnis in ETCD existiert, werden Sie nicht den Fehler mehr.

habe ich einen Pull request, die den Fehler behebt und wenn Sie den festen Code verwenden möchten, können Sie Ihr eigenes Bild bauen:

git clone [email protected]:rca/docker-register.git 
cd docker-register 
docker build -t docker-register . 

Dann wird Ihr Befehl für Docker Register würde wie folgt aussehen:

$ 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 

Hinweis Ich habe einfach jwilder/ aus dem Image-Namen im Befehl entfernt, so dass es Ihre lokale Version verwendet.

+0

Danke, das hilft sehr! –