无法发现docker集装箱

我正在按照本教程进行服务发现http://jasonwilder.com/blog/2014/07/15/docker-service-discovery

简述:

我创build了一个在xyzd:4001上运行的etcd主机

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

在backend_serverip:8000和docker-register上创build一个运行容器的后端服务器

 $ 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=xyzd:4001 -v /var/run/docker.sock:/var/run/docker.sock -t jwilder/docker-register 

在backend2_serverip:8000和docker-register上创build另一个运行容器的后端服务器

  $ 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=xyzd:4001 -v /var/run/docker.sock:/var/run/docker.sock -t jwilder/docker-register 

创build了一个运行docker-discover和ubuntu镜像的客户端

 $ 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 

当我查看日志以查看容器是否正在注册时,我看到了下面的错误

 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 

我尝试手动创build这个目录,我也尝试运行具有特权的容器,但没有运气

你得到的错误是来自代码中的错误 。 问题是你的etcd目录中不存在/backends 。 您可以通过运行以下命令手动创build它:

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

一旦目录存在于etcd中,就不会再出错了。

我创build了一个修复错误的拉取请求 ,如果你想使用固定的代码,你可以build立你自己的图像:

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

那么你的docker寄存器命令看起来像:

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

注意我只是从命令中的图像名称中删除jwilder/ ,所以它使用你的本地版本。