2017-01-16 5 views
1

У меня есть докер, докер-сочинитель и консул, установленный на моей локальной машине. Теперь я хочу зарегистрировать одну из моих услуг в Консуле, используя регистратор. Файл Docker моего сервиса прост как:Невозможно зарегистрировать службу докеров с регистратором

FROM php:7.0-apache 
COPY code/ /var/www/html/ 
ENV SERVICE_ID=php 
ENV SERVICE_NAME=php-apache 

Кроме того, у меня есть консул. Я могу проверить это с помощью простых команд, таких как:

$ curl -X PUT 'Hello world ' 127.0.0.1:8500/v1/kv/msg1 
$ curl 127.0.0.1:8500/v1/kv/msg1?raw 
Hello world 

тогда я начинаю регистратор, контейнер, после одного из учебных пособий:

$ sudo docker run -d --name registrator-consul -v /var/run/docker.sock:/tmp/docker.sock \ 
-h jacobian-VirtualBox gliderlabs/registrator \ 
-ip 127.0.0.1 consul://127.0.0.1:8500 

Wnen Я запустить выше команду, я получаю некоторые большой ключ в консоли :

a25a48 ... 3b69 

Все выглядит хорошо, так как у меня нет сообщений об ошибках. Если же я проверяю

$ docker ps 

Я не вижу никаких активных изображений

Но в то же время, если я бегу

$ docker ps -a 

Я вижу эту строку на самом верху:

CONTAINER ID ... STATUS 

##somecode## ... Exited(1) 52 seconds ago 

Это точно контейнер-регистратор-консул, и мне не нравится, что он вышел. Я не делал этого сам, поэтому действительно странно, что он не находится в активном состоянии.

я, наконец, построить и запустить мой PHP-апачский контейнер:

$ docker build -t php-apache. 
$ docker run -d --name php-apache -p 8181:80 php-apache 

На данный момент, все прекрасно работает. Я даже могу проверить, работает ли моя служба. Итак, когда я перехожу на localhost: 8181, я вижу красивую страницу с веб-сервером Apache. НО. Моя задача - проверить, зарегистрирована ли она в консуле или нет. Я проверить это следующим образом:

$ curl jacobian-VirtualBox:8500/v1/catalog/services | jq '.' 

Но в результате этой команды я вижу это в консоли:

{ 
    "consul": [] 
} 

Таким образом, никаких услуг не было зарегистрировано. Почему мой вопрос? Что я сделал не так, и как я могу это исправить? Благодаря!

+0

Для тех людей, которые голосуют. Пожалуйста, поделитесь своими мыслями по этой теме. – Jacobian

+0

Я неправильно понял некоторые вещи. Сначала, как вы можете выполнить запрос 'curl' в контейнер jacobian, если он вышел? Во-вторых, поскольку я видел, что регистратор консула и ваш сервер Apache не сообщают друг друга. Почему консул должен зарегистрировать ваш сервер Apache? – Cortwave

+0

Вся проблема заключалась в том, как запускается контейнер-регистратор. Я удалил '-ip 127.0.0.1' и добавил' --net = host', и он начал работать. – Jacobian

ответ

1

Запустил регистратор с параметром -h. -h - просто имя хоста для вашего контейнера, а не хост, где он будет развернут. Также вы передаете 127.0.0.1 в качестве вашего адреса сервера Consul регистратору. 127.0.0.1 - это интерфейс loopback для контейнера регистратора - не для вашего хоста с запущенным сервером Consul. Если ваш сервер Consul работает на вашем хосте (если вы можете получить к нему доступ по адресу 127.0.0.1:8500), вам необходимо добавить параметр --net=host в ваш сеанс регистрации.

P.S. Я не знаю настоящего адреса jacobian-VirtualBox хоста, который вы используете в запросе curl. В случае, если это не 127.0.0.1, это не сработает, и вам нужно будет подключить ваш контейнер регистратора с другим сервисом Consul (подключиться к другой сети или указать другой адрес сервера Consul, если он доступен внутри контейнера регистратора.

+0

Спасибо! Но не могли бы вы посоветовать установить этот параметр '--net = host' через' docker-compose.yml'? Я задал вопрос, посвященный исключительно этому параметру в этом потоке - http://stackoverflow.com/questions/41681944/unable-to-run-registrator-using-docker-compose-get-connection-refused-error. Поэтому я сердечно приветствую вас и надеюсь, что вы сможете поделиться еще одним советом. Благодаря! – Jacobian

 Смежные вопросы

  • Нет связанных вопросов^_^