Я использую weave для запуска некоторых контейнеров, которые образуют кластер базы данных. Я заставил это работать вручную на двух хостах в EC2, выполнив следующие действия:
$HOST1> weave launch
$HOST2> weave launch $HOST1
$HOST1> eval $(weave env)
$HOST2> eval $(weave env)
$HOST1> docker run --name neo-1 -d -P ... my/neo4j-cluster
$HOST2> docker run --name neo-2 -d -P ... my/neo4j-cluster
$HOST3> docker run --name neo-1 -d -P -e ARBITER=true ... my/neo4j-cluster
Я могу проверить журналы, и все запускается нормально.
При использовании ansible я могу заставить вышеперечисленное работать, используя модуль command: ...
и переменную среды:
- name: Start Neo Arbiter
command: 'docker run --name neo-2 -d -P ... my/neo4j-cluster'
environment:
DOCKER_HOST: 'unix:///var/run/weave/weave.sock'
Поскольку это в основном все, что делает eval $(weave env)
.
Но когда я использую модуль docker
для ansible, даже с параметром docker_url
, установленным на то же, что вы видите выше с DOCKER_HOST
, DNS не разрешается между хостами. Вот как это выглядит:
- name: Start Neo Arbiter
docker:
image: "my/neo4j-cluster:{{neo4j_version}}"
docker_url: unix:///var/run/weave/weave.sock
name: neo-3
pull: missing
state: reloaded
detach: True
publish_all_ports: True
OR
- name: Start Neo Arbiter
docker:
image: "my/neo4j-cluster:{{neo4j_version}}"
docker_url: unix:///var/run/weave/weave.sock
name: neo-3
pull: missing
state: reloaded
detach: True
publish_all_ports: True
environment:
DOCKER_HOST: 'unix:///var/run/weave/weave.sock'
Ни один из них не работает. DNS не разрешается, поэтому серверы никогда не запускаются. У меня есть другие параметры сервера (например, SERVER_ID для neo4j и т. д., просто не показанные здесь для простоты).
Кто-нибудь сталкивался с этим? Я знаю, что модуль docker для ansible использует docker-py
и прочее. Интересно, есть какая-то несовместимость с плетением?
ИЗМЕНИТЬ
Я должен упомянуть, что когда контейнеры запускаются, они фактически появляются в WeaveDNS и кажутся добавленными в систему. Я могу пропинговать локальное имя хоста каждого контейнера, пока он находится на хосте. Однако, когда я перехожу на другой хост, он не может пропинговать те, что на другом хосте. И это несмотря на то, что они регистрируются в WeaveDNS (weave status dns
) и weave status
, показывая правильное количество пиров и установленных соединений.
command
. Я собираюсь оставить это открытым, так как это все еще проблема AFAICT. - person alph486   schedule 08.10.2015docker
? Во-вторых, подтвердите, что запросы проходят через прокси, отметивdocker logs weaveproxy
? - person errordeveloper   schedule 08.10.2015command
. Я подозреваю, что это как-то связано с тем, как была реализована библиотека python, по сравнению с CLI, но не могу быть уверен. - person alph486   schedule 25.08.2016