服务似乎无法脱离docker-container

时间:2018-08-06 09:58:54

标签: docker dockerfile consul go-micro

我有一个微服务,我希望它在运行在容器中的Consul上注册。仅在命令提示符下执行此操作时,此命令运行正常。我查看了领事容器中的日志,发现一切正常。注册和注销:

 2018/08/06 08:54:44 [WARN] agent: Service name "myservice.ucum-service" will not be discoverable via DNS due to invalid characters. Valid characters include all alpha-numerics and dashes.
 2018/08/06 08:54:44 [INFO] agent: Synced service "myservice.ucum-service-5d4543b5-9956-11e8-a484-5404a6f49407"
 2018/08/06 08:54:44 [INFO] agent: Synced check "service:myservice.ucum-service-5d4543b5-9956-11e8-a484-5404a6f49407"
 2018/08/06 08:54:53 [INFO] agent: Deregistered service "myservice.ucum-service-5d4543b5-9956-11e8-a484-5404a6f49407"
 2018/08/06 08:54:53 [INFO] agent: Deregistered check "service:myservice.ucum-service-5d4543b5-9956-11e8-a484-5404a6f49407"

如您所见,它抱怨字符无效。我不知道这意味着什么,但是它运行良好,我可以从服务客户端运行我的测试而不会出现问题。因此,我们可以假设Consul容器运行良好。

但是现在我的问题。我也想在容器中运行该服务,并且出现了问题。这是我用于服务的Dockerfile:

FROM debian:stretch
MAINTAINER Bert Verhees "xxxxx@xxxxx.xx"
ADD archibold_ucum_service /archibold_ucum_service
ADD data/ucum-essence.xml /data/ucum-essence.xml
ENTRYPOINT ["/archibold_ucum_service", "-ucumfile=/data/ucum-essence.xml"]

如您所见,服务需要以参数开头,这也没问题。

启动此容器时,它似乎运行良好,但是当我查看领事日志时,它从未看到过。服务容器的日志告诉我原因。我以这种方式启动容器:

docker run -d --name=ucum_micro_service ucum_micro_service

容器ID非常好。这样看起来不错,但是查看日志,就会发生这种情况:

2018/08/06 09:51:42 Listening on [::]:46517
2018/08/06 09:51:42 Broker Listening on [::]:38283
2018/08/06 09:51:42 Registering node: myservice.ucum-service-52a66d2c-995e-11e8-bb3a-0242ac110002
2018/08/06 09:51:42 Put http://127.0.0.1:8500/v1/agent/service/register: dial tcp 127.0.0.1:8500: connect: connection refused

所以我的想法是它不能脱离容器。但是我该如何解决这个问题呢?

非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

除非在docker run命令中使用--network = host,否则容器中的localhost与计算机上的localhost不同。就像docker为您的容器创建一个“单独的”文件系统一样,它对网络也是如此。

因此,无论您使用docker run --network=host -d --name=ucum_micro_service ucum_micro_service,还是在容器中运行其他服务,并使用docker网络/链接或类似方式将它们连接起来,或者使用计算机的公共IP(您可以将其作为参数)。