2015-11-18 2 views
1

У меня есть контейнер для докеров, управляемый Ansible. Каждый раз, когда я запускаю контейнер с Ansible, он воссоздается, а не только запускается.Почему ansible хранит воссоздающие контейнеры докеров с состоянием «начато»

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

ansible-playbook <playbook> -i <inventory> --extra-vars "state=stopped" 
ansible-playbook <playbook> -i <inventory> --extra-vars "state=started" 

Вот что анзибль TAKS я использую для управления контейнера. Единственное, что меняется между командой «stop» и «start», это {{state}}.

- docker: 
    name: "{{ postgres_container_name }}" 
    image: "{{ postgres_image_name }}" 
    state: "{{ state }}" 
    ports: 
     - "{{ postgres_host_port }}:{{ postgres_guest_port }}" 
    env: 
     POSTGRES_USER: "{{ postgres_user }}" 
     POSTGRES_PASSWORD: "{{ postgres_password }}" 
     POSTGRES_DB: "{{ postgres_db }}" 

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

changed: [127.0.0.1] => {"ansible_facts": {"docker_containers": [{"Id": "ab1c0f6cc30de33aba31ce93671267783ba08a1294df40556870e66e8bf77b6d", "Warnings": null}]}, "changed": true, "containers": [{"Id": "ab1c0f6cc30de33aba31ce93671267783ba08a1294df40556870e66e8bf77b6d", "Warnings": null}], "msg": "removed 1 container, started 1 container, created 1 container.", "reload_reasons": null, "summary": {"created": 1, "killed": 0, "pulled": 0, "removed": 1, "restarted": 0, "started": 1, "stopped": 0}} 

Он утверждает, что контейнер изменился, был удален, создан и запущен.

Не могли бы вы рассказать мне, почему Ansible видит мой контейнер как измененный и воссоздает его вместо запуска?

ответ

2

Модуль докер-модуля Ansible сначала удаляет все остановленные контейнеры с тем же именем, когда вы используете его с состоянием started.

module docs на самом деле не делают все это ясным, но есть комментарий, объясняющий это в исходном коде в started function.

+0

Похоже, что нет возможности запуска остановленных контейнеров без их воссоздания. Все состояния: запущены, перезагружены и перезапущены, удалите контейнер, если он остановлен. В результате невозможно запустить команду, которая работает так: «docker start {{container_name}} с Ansible. Я должен создать контейнер данных, чтобы избежать потери данных при каждом запуске контейнеров. Я прав? –

+0

Не обязательно данные контейнер, этот шаблон был заменен на [используя тома] (https://docs.docker.com/engine/admin/volumes/volumes/). – Dirk

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