并不是所有的服务都在领事馆注册 [英] Not all services are registered in Consul with Registrator
问题描述
...
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屋!