Сервис, похоже, не сможет вырваться из docker-контейнера

У меня есть сервис go-micro, и я хочу, чтобы он зарегистрировался в Консуле, работающем в контейнере. Делая это только из командной строки, это работает нормально. Я проверяю логи из консула-контейнера и вижу, что все в порядке. Регистрация и снятие с учета:

 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"

Как видите, он жалуется на недопустимые символы. Я не знаю, что это значит, но он работает нормально, я могу запустить свои тесты из сервис-клиента без проблем. Поэтому можно предположить, что Консул-контейнер работает нормально.

Но теперь мой вопрос. Я хочу запустить службу также в контейнере, и там возникла проблема. Это мой 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

Это очень хороший идентификатор контейнера. Так что это выглядит хорошо, но, глядя на логи, это происходит:

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 ответ

Решение

Если вы не используете --network=host в своей команде запуска docker, localhost в вашем контейнере не совпадает с localhost на вашем компьютере. Так же, как docker создает "отдельную" файловую систему для вашего контейнера, он делает то же самое с сетью.

Так что либо вы используете docker run --network=host -d --name=ucum_micro_service ucum_micro_serviceВы запускаете другой сервис также в контейнере и используете для подключения их сети / ссылки Docker или аналогичный публичный ip своего компьютера (который вы можете передать в качестве аргумента).

Другие вопросы по тегам