2017-01-17 10 views
1

私はDockerとDocker Composeを自分のマシンに持っており、私はdocker-compose.ymlファイルを持っています。このファイルの内部私はそうすべてのサービスが登録者との領事に登録されているわけではありません

... 
nginx: 
    build: 
     context: ./nginx-proxy' 
    image: nginx-proxy 
    container_name: nginx 
    ports: 
     - 8181:80 
    links: 
     - consul-server 
     - php 
    depends_on: 
     -registrator 

php: 
    build: 
     context: ./php-apache 
    image: php-apache 
    container_name: php-apache 
    depends_on: 
     - registrator 

... 

また、領事・サーバーとレジコンテナの定義が含まれ、非常に大きなドッキングウィンドウ-compose.ymlファイル、であるような2つのサービスを定義します。一見すると、すべてがうまくいく。実行したとき:

$ docker-compose up 

私のすべてのコンテナが実行中で、エラーメッセージが表示されません。私は、例えばPHPのコンテナが実際に動作していることを確認することもできます(localhost:8181に行って、このサービスでレンダリングされた素敵なhtmlページを見ています)。しかし、問題は、このPHPサービスは登録者に登録されていないことです。その結果

$ curl 127.0.0.1:8500/v1/catalog/services 

、私はこの取得:私はそうのようにそれをチェックレジが正常にnginxのプロキシサービスを登録しますが、PHPのサービスをスキップしたいくつかの奇妙な理由で、だから、

{"consul-server-8500":[], "nginx-proxy-80":[]} 

を。なぜ私は不思議です。これに基づいて、nginx-proxyサービス用の領事テンプレートを作成するので、本当に必要です。だから、私はいくつかの助けが必要です。

EDIT

これは私が領事やレジサービスを定義する方法である:

version: '2' 
services: 
    consul-server: 
     build: 
      context: ./consul-server 
     hostname: ${MYHOST} 
     ports: 
      - 8500:8500 
    registrator: 
     build: 
      context: ./registrator 
     container_name: registrator 
     command: "consul://${MYHOST}:8500" 
     hostname: ${MYHOST} 
     network_mode: host 
     depends_on: 
      - consul-server 
     volumes: 
      - /var/run/docker.sock:/tmp/docker.sock 

そして、これは私のレジDockerfileがどのように見えるかです:

を記録レジ

FROM gliderlabs/registrator:latest 
ENV SERVICE_ID=registrator 
ENV SERVICE_NAME=registrator 
ENTRYPOINT ["/bin/registrator"] 

それが重要な場合

わからない、:

2017/01/17 11:52:52 Starting registrator v7 ... 2017/01/17 11:52:52 Using consul adapter: consul://127.0.0.1:8500 2017/01/17 11:52:52 Connecting to backend (0/0) 2017/01/17 11:52:52 consul: current leader 2017/01/17 11:52:52 Listening for Docker events ... 2017/01/17 11:52:52 Syncing services on 2 containers 2017/01/17 11:52:52 ignored: c7251ebcbec4 no published ports 2017/01/17 11:52:52 ignored: d22263dca979 port 8301 not published on host 2017/01/17 11:52:52 ignored: d22263dca979 port 8302 not published on host 2017/01/17 11:52:52 ignored: d22263dca979 port 8600 not published on host 2017/01/17 11:52:52 ignored: d22263dca979 port 8600 not published on host 2017/01/17 11:52:52 ignored: d22263dca979 port 8300 not published on host 2017/01/17 11:52:52 ignored: d22263dca979 port 8302 not published on host 2017/01/17 11:52:52 ignored: d22263dca979 port 8301 not published on host 2017/01/17 11:52:52 added: d22263dca979 consul 2017/01/17 11:52:52 ignored: d22263dca979 port 8400 not published on host 2017/01/17 11:52:52 ignored: c7251ebcbec4 no published ports 2017/01/17 11:52:52 ignored: 74a190734619 port 80 not published on host 2017/01/17 11:52:53 added: bd9f65b332a5 nginx 2017/01/17 11:52:53 ignored: bd9f65b332a5 port 443 not published on host 

は、私の知る限り見ることができるようにレジは私のPHPサービス(ドッキングウィンドウのID = 74a190734619)を無視します。しかし、私はそれをどのように修正できるのか分かりません。

+0

バグですか - https://github.com/gliderlabs/registrator/issues/474? – Jacobian

+0

docker-compose versionはあなたが使っていますか?ドッカーによるv2リンクの作成は推奨されておらず、代わりにネットワークを使用する必要があります。登録者サービス宣言も追加します。 – Cortwave

+0

ドッカーの作成バージョンを確認するにはどうすればよいですか?登録者サービス宣言については、数分で投稿します。 – Jacobian

答えて

1

ログ登録者によれば、あなたのホストにパブリッシュされたポートだけが登録されます。それは理にかなっています。領事はサービス発見ツールであり、発行されたポートを持たないサービスを登録する意味はありません。

P.S.ドッカーからリンクを削除することができます。バージョン2を使用しているときと同様にリンクを作成できます(リンクは推奨されず、ネットワークの使用がさらに望ましい)。あなたの問題ではありません。ただのアドバイス。

+0

リンクを削除すると、サービス名で別のコンテナに参照することはできますか? – Jacobian

+0

はい、彼らはデフォルトで共通のドッカーネットワークにあり、サービス名 – Cortwave

+0

でお互いを解決することができます。そして、私がPHPサービス用のポートを公開すると、何が起きるかをもう一度チェックします。ありがとう! – Jacobian

関連する問題