gpt4 book ai didi

docker - 并非所有服务都在 Consul 中使用 Registrator 注册

转载 作者:行者123 更新时间:2023-12-02 19:09:49 25 4
gpt4 key购买 nike

我的机器上有 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

...

这是一个相当大的 docker-compose.yml 文件,其中还包含 consul-server 和 registrator 容器的定义。乍一看,一切正常。当我运行时:
$ docker-compose up

我看到我所有的容器都在运行,并且没有看到任何错误消息。我什至可以检查,例如 php 容器确实正在运行(只需转到 localhost:8181,我看到一个使用此服务呈现的漂亮 html 页面)。但是,问题是,这个 php 服务没有向 Registrator 注册。我像这样检查它:
$ curl 127.0.0.1:8500/v1/catalog/services

结果,我得到了这个:
{"consul-server-8500":[], "nginx-proxy-80":[]}

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

编辑

这就是我定义领事和注册服务的方式:
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

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

最佳答案

根据日志,注册器仅注册那些发布到您的主机的端口。这是有道理的。 Consul 是服务发现工具,注册没有发布端口的服务是没有意义的。

附言您可以在使用版本 2 时从 docker-compose 中删除链接(不推荐使用链接,更可取网络使用)。这不是关于你的问题。只是建议。

关于docker - 并非所有服务都在 Consul 中使用 Registrator 注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41697466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com