8

サービスディスカバリについては、このチュートリアルに従っていますhttp://jasonwilder.com/blog/2014/07/15/docker-service-discovery

簡単に言うと:

xyzd: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 $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-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

このディレクトリを手動で作成しようとしましたが、特権オプションを使用してコンテナを実行しようとしましたが、うまくいきませんでした

4

1 に答える 1

4

発生しているエラーは、コードのバグによるものです。問題は/backends、etcd ディレクトリに存在しないことです。これを実行して、手動で自分で作成できます。

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

ディレクトリが etcd に存在すると、エラーは発生しなくなります。

バグを修正するプルリクエストを作成しました。修正されたコードを使用する場合は、独自のイメージをビルドできます。

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/したので、ローカル バージョンが使用されることに注意してください。

于 2015-07-13T17:33:09.030 に答える