Сервис, похоже, не сможет вырваться из 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 своего компьютера (который вы можете передать в качестве аргумента).