并非所有的服务都在注册机构的领事处注册

我的机器上有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和registry容器的定义。 乍一看,一切正常。 当我运行:

 $ docker-compose up 

我看到我所有的容器都在运行,我看不到任何错误信息。 我甚至可以检查,例如PHP容器确实正在运行(只要去localhost:8181,我看到一个很好的HTML页面呈现与此服务)。 但是,问题是,这个php服务没有注册到注册中心。 我检查它是这样的:

 $ curl 127.0.0.1:8500/v1/catalog/services 

结果,我得到这个:

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

所以,出于一些奇怪的原因,注册人成功注册了nginx-proxy服务,但是跳过了php服务。 我想知道为什么。 我真的需要它,因为基于这个,我会为nginx-proxy服务创buildconsul模板。 所以,我需要一些帮助。

编辑

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

 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服务(docker id = 74a190734619)。 但是我不知道该如何解决。

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

PS你可以删除你的docker组成的链接,组成,因为你正在使用版本2(链接已弃用,networking使用更可取)。 这不是关于你的问题。 只是build议。