2015-12-10 3 views
1

Я использую докеры-составы и докеры. Я создал сервер docker-mgt, из которого я сделал докер-машину, чтобы настроить кластер рой, состоящий из мастера роя и двух агентов рой.Docker-compose and Docker-swarm

Я создал приложение Express, которое запускается в контейнере, и кажется, что мастер рой решил получить его на agent1. Затем у меня также есть сайт Wordpress (пример с сайта сокета докеров), который я запускаю с помощью docker-compose на Docker Swarm.

[email protected]:~/wordpress$ docker-compose up 
wordpress_db_1 is up-to-date 
Creating wordpress_web_1 
ERROR: Error: image library/wordpress_web:latest not found 

Следующие изображения доступны:

[email protected]:~/wordpress$ docker images 
REPOSITORY   TAG     IMAGE ID   CREATED    VIRTUAL SIZE 
orchardup/php5  latest    c385b8a81cee  18 months ago  330.1 MB 
swarm    latest    a9975e2cc0a3  19 hours ago  17.15 MB 
orchardup/mysql  latest    5a45a5a953bb  16 months ago  292.4 MB 
wordpress_web  latest    e484f88dc8c8  11 minutes ago  350.9 MB 
node-ip    latest    d177af00338b  39 minutes ago  549.5 MB 
centos    centos6    1a895dd3954a  8 weeks ago   190.6 MB 

Так что действительно есть wordpress_web: последний доступный и еще жалуется.

При запуске этого приложения wordpress на отдельном хостеле докеры (а не в кластере рой) он работает отлично. Чтобы исключить ошибку в приложении wordpress, я также попробовал другое совершенно другое приложение, состоящее из двух контейнеров (с помощью docker-compose), и это точно такая же проблема.

Я начинаю думать, что сборщик докеров и рой не могут работать вместе гладко, но это, конечно, трудно поверить.

ответ

1

Проблема в том, что рой нужен способ получения изображения для запуска контейнера. Если изображение не существует в реестре (или концентраторе докеров), то у него нет (в настоящее время) способа получить это изображение, и вы получите эту ошибку.

Один из вариантов - пометить изображения с полным именем и нажать их на концентратор. Тогда рой сможет вытащить изображения на всех узлах.

Другими вариантами являются распространение изображения с использованием docker save и docker load, которые отправят изображение на все узлы.

Другой вариант - добавить image affinity, чтобы заставить контейнер работать на узле с изображением.

В будущем рой должен получить возможность распространять изображения между узлами.

+0

Спасибо, я использовал докер-концентратор, и это, похоже, действительно работает. Тем не менее, я был удивлен, увидев, что докеры составляют результаты запуска обоих контейнеров на роевом мастере вместо одного из обоих агентов? Любая идея, почему это так? – wiwa1978

+0

рой имеет разные стратегии планирования (https://docs.docker.com/swarm/scheduler/strategy/). Значение по умолчанию должно быть распространено, поэтому я ожидаю, что он будет использовать другой хост, но, возможно, если контейнер был воссоздан, он будет помещен вместе. Вы можете использовать сродство или ограничение, чтобы поместить его на другой узел: https://docs.docker.com/swarm/scheduler/filter/ – dnephin

3

Возможно, вам захочется попробовать Rancher, он использует компоновку и упрощает развертывание приложений по широкому спектру инфраструктуры, сохраняя при этом встроенный синтаксис докеров и используя compose. GitHubWebsite

+0

Действительно, все еще в моем списке дел. Пытаюсь размахивать докером и множеством инструментов, окружающих его. Кроме того, CoreOS находится в моем списке дел. – wiwa1978

+0

Rancher использует подобный форме формат, но на самом деле он не составлен, и вы должны ожидать, что некоторые вещи будут вести себя по-другому. – dnephin