并不是所有的服务都在领事馆注册 [英] Not all services are registered in Consul with Registrator

查看:281
本文介绍了并不是所有的服务都在领事馆注册的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Docker和Docker在我的机器上编写,我有一个docker-compose.yml文件。在这个文件的内部,我定义了两个这样的服务:

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

php:
build:
上下文:./php-apache
image:php-apache
container_name:php-apache
depends_on:
- 注册人

...

它是一个很大的docker-compose.yml文件,它还包含了consul-server和registrator容器的定义。乍一看,一切都很好。当我运行时:

  $ docker-compose up 

我看到我的所有容器正在运行,我看不到任何错误消息。我甚至可以检查,例如php容器确实运行(只是去本地主机:8181,我看到一个漂亮的html页面渲染与这个服务)。但是,问题是,这个php服务没有注册到注册器。我检查它是这样的:

  $ curl 127.0.0.1:8500/v1/catalog/services 

因此,我得到这个:

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

所以,对于一些奇怪的原因,注册人注册成功nginx-proxy服务,但跳过了php服务。我想知道为什么。我真的需要它,因为基于此,我将为nginx-proxy服务创建领事模板。所以,我需要一些帮助。



编辑



这是我如何定义领事和注册商服务:

 版本:'2'
服务:
consul-server:
build:
上下文:./consul-server
主机名:$ {MYHOST}
ports:
- 8500:8500
注册人:
build :
上下文:./registrator
container_name:registrator
命令:consul:// $ {MYHOST}:8500
主机名:$ {MYHOST}
network_mode :host
depends_on:
- consul-server
卷:
- /var/run/docker.sock:/tmp/docker.sock

这就是我的注册商Dockerfile的样子:

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

注册人日志



不确定,如果重要: / p>

  2017/01/17 11:52:52开始注册商v7 ... 
2017/01/17 11: 52:52使用领事适配器:consul://127.0.0.1:8500
2017/01/17 11:52:52连接到后端(0/0)
2017/01/17 11:52 :52领事:现任领导人
2017/01/17 11:52:52聆听Docker事件...
2017/01/17 11:52:52在2个容器上同步服务
2017/01/17 11:52:52忽略:c7251ebcbec4没有发布的端口
2017/01/17 11:52:52忽略:d22263dca979端口8301未在主机上发布
2017/01/17 11: 52:52忽略:d22263dca979端口8302未在主机上发布
2017/01/17 11:52:52忽略:d22263dca979端口8600未在主机上发布
2017/01/17 11:52:52忽略:d22263dca979端口8600未发布主机
2017/01/17 11:52:52忽略:d22263dca979端口8300未在主机上发布
2017/01/17 11:52:52忽略:d22263dca979端口8302没有在h上发表ost
2017/01/17 11:52:52忽略:d22263dca979端口8301未在主机上发布
2017/01/17 11:52:52添加:d22263dca979 consul
2017/01 / 17 11:52:52忽略:d22263dca979端口8400未在主机上发布
2017/01/17 11:52:52忽略:c7251ebcbec4没有发布端口
2017/01/17 11:52:52忽略:74a190734619端口80未发布主机
2017/01/17 11:52:53添加:bd9f65b332a5 nginx
2017/01/17 11:52:53忽略:bd9f65b332a5端口443未在主机上发布

据我所见,注册人忽略了我的php服务(docker id = 74a190734619)。但是我不知道如何解决它。

解决方案

根据日志注册器,只注册那些发布给您的主机的端口。这是有道理的。领事是服务发现工具,没有注册没有发布端口的服务。



P.S。您可以使用版本2(链接不推荐使用,更优选的网络使用),从您的docker-compose中删除链接。这不是你的问题。只是建议


I have Docker and Docker Compose on my machine and I have a docker-compose.yml file. Inside of this file I define two services like so

 ...
 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

...

It is quite a big docker-compose.yml file, which also contains definitions of consul-server and registrator containers. At first glance, everything works good. When I run:

$ docker-compose up

I see that all my containers are running and I see no error messages. I can even check, that for example php container is indeed running (just going to localhost:8181, I see a nice html page rendered with this service). However, the problem is, this php service is not registered with Registrator. I check it like so:

$ curl 127.0.0.1:8500/v1/catalog/services

As a result, I get this:

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

So, for some strange reason Registrator registered successfully nginx-proxy service, but skipped php service. I wonder why. I really need it, since based on this, I would create consul templates for nginx-proxy service. So, I need some help.

EDIT

This is how I define consul and registrator services:

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

And this is how my registrator Dockerfile looks like:

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

Registrator log

Not sure, if it is important:

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

As far as I can see Registrator ignores my php service (docker id=74a190734619). But I do not know how can I fix it.

解决方案

According to logs registrator registers only those ports which published to your host. And it make sense. Consul is service discovery tool and there is no sense to register services which has no published ports.

P.S. you can remove links from your docker-compose as you are using version 2 (links are deprecated and networks usage more preferable). It's not about your problem. Just advice.

这篇关于并不是所有的服务都在领事馆注册的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆