无法发现docker容器

无法发现docker容器,docker,registry,service-discovery,etcd,Docker,Registry,Service Discovery,Etcd,我将遵循本教程进行服务发现 简而言之: 我创建了一个运行在x.y.z.d:4001的etcd主机 docker run -d --name etcd -p 4001:4001 -p 7001:7001 coreos/etcd 在后端服务器IP:8000和docker register上创建了一个运行容器的后端服务器 $ docker run -d -p 8000:8000 --name whoami -t jwilder/whoami $ docker run --name docker-re

我将遵循本教程进行服务发现

简而言之:

我创建了一个运行在x.y.z.d:4001的etcd主机

docker run -d --name etcd -p 4001:4001 -p 7001:7001 coreos/etcd
在后端服务器IP:8000和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
 $ 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
在backend2_serverip:8000和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
 $ 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
创建了一个运行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
2015/07/09 19:28:00运行notify命令时出错:python/tmp/register.py,退出状态1
2015/07/09 19:28:00回溯(最近一次通话最后一次):
文件“/tmp/register.py”,第22行,在
backends=client.read(“/backends”)
文件“/usr/local/lib/python2.7/dist-packages/etcd/client.py”,第347行,已读
self.key_端点+键,self._MGET,params=params,timeout=timeout)
文件“/usr/local/lib/python2.7/dist packages/etcd/client.py”,第587行,在api\u中执行
返回self.\u句柄\u服务器\u响应(响应)
文件“/usr/local/lib/python2.7/dist packages/etcd/client.py”,第603行,在
etcd.EtcdError.handle(**r)
文件“/usr/local/lib/python2.7/dist-packages/etcd/_-init__.py”,第184行,位于句柄中
提升exc(消息,有效负载)
etcd.EtcdKeyNotFound:找不到键:/backends

我尝试手动创建此目录,我还尝试使用特权选项运行容器,但没有成功

您收到的错误来自一个。问题是您的etcd目录中不存在
/backends
。您可以通过运行以下命令手动创建它:

curl -L http://127.0.0.1:4001/v2/keys/backends -XPUT -d dir=true
一旦目录存在于etcd中,您就不会再收到错误

我创建了一个pull来修复bug,如果您想使用修复的代码,您可以构建自己的映像:

git clone git@github.com:rca/docker-register.git
cd docker-register
docker build -t docker-register .
然后,docker register的命令如下所示:

$ 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

注意,我只是从命令中的图像名称中删除了
jwilder/
,因此它使用您的本地版本。

谢谢,这很有帮助!