无法发现 docker 个容器
Unable to discover docker containers
我正在按照本教程进行服务发现 http://jasonwilder.com/blog/2014/07/15/docker-service-discovery
简要说明:
我在 x.y.z.d:4001
创建了一个 etcd 主机 运行
docker run -d --name etcd -p 4001:4001 -p 7001:7001 coreos/etcd
创建了一个后端服务器 运行 在 backend_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 }') -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 }') -e ETCD_HOST=x.y.z.d:4001 -v /var/run/docker.sock:/var/run/docker.sock -t jwilder/docker-register
创建了一个客户端 运行 docker-发现和一个 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
我试过手动创建这个目录,我也试过运行有特权选项的容器,但没有成功
您收到的错误来自 bug in the code。问题是 /backends
在您的 etcd 目录中不存在。您可以通过 运行 this:
手动创建它
curl -L http://127.0.0.1:4001/v2/keys/backends -XPUT -d dir=true
一旦目录存在于 etcd 中,您将不会再收到错误。
我创建了一个 pull request 修复了这个错误,如果你想使用固定的代码,你可以构建你自己的图像:
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 }') -e ETCD_HOST=x.y.z.d:4001 -v /var/run/docker.sock:/var/run/docker.sock -t docker-register
请注意,我只是从命令中的图像名称中删除了 jwilder/
,因此它使用您的本地版本。
我正在按照本教程进行服务发现 http://jasonwilder.com/blog/2014/07/15/docker-service-discovery
简要说明:
我在 x.y.z.d:4001
创建了一个 etcd 主机 运行docker run -d --name etcd -p 4001:4001 -p 7001:7001 coreos/etcd
创建了一个后端服务器 运行 在 backend_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 }') -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 }') -e ETCD_HOST=x.y.z.d:4001 -v /var/run/docker.sock:/var/run/docker.sock -t jwilder/docker-register
创建了一个客户端 运行 docker-发现和一个 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
我试过手动创建这个目录,我也试过运行有特权选项的容器,但没有成功
您收到的错误来自 bug in the code。问题是 /backends
在您的 etcd 目录中不存在。您可以通过 运行 this:
curl -L http://127.0.0.1:4001/v2/keys/backends -XPUT -d dir=true
一旦目录存在于 etcd 中,您将不会再收到错误。
我创建了一个 pull request 修复了这个错误,如果你想使用固定的代码,你可以构建你自己的图像:
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 }') -e ETCD_HOST=x.y.z.d:4001 -v /var/run/docker.sock:/var/run/docker.sock -t docker-register
请注意,我只是从命令中的图像名称中删除了 jwilder/
,因此它使用您的本地版本。