ansible docker-модуль компоновки, результат, отличный от ansible, чем по ssh на хосте

#python #docker #docker-compose #ansible #ansible-role

Вопрос:

У меня есть задача в моей роли Ansible Bitbucket, которая просто запускает два файла docker-compose.yml. При выполнении этого из Ansible происходит сбой, но когда я выполняю ту же команду по ssh на реальном сервере, она работает просто отлично. В настоящее время я выполняю свой playbook как root, и когда я вручную выполняю docker-compose-f <путь> вверх-d, я также являюсь root.

 - name: Create and start services
    - name: docker compose up
      docker_compose:
        project_src: "{{ bitbucket__install_path }}"
        files: "{{ bitbucket__compose_files }}"
        state: present
      register: output
 

Ансибельная команда:

ansible-playbook -i инвентаризация/постановочные книги/bitbucket-сервер.yml -vvvv -kKu root-запрос-пропуск хранилища-запуск-при-выполнении задачи «Настройка bitbucket»

Ansible успешно запускает 2 из 3 контейнеров, но третий вылетает с ошибкой:

Ответ на ошибку от демона: Не удалось создать среду выполнения OCI: container_linux.go:380: запуск процесса контейнера вызван: exec: «/my_entrypoint.sh»: отказано в разрешении: неизвестная ошибка: не удалось запустить контейнеры: nginx_bitbucket_1

Мой вопрос в том, почему Ansible получает ошибку при выполнении вышеуказанной задачи во время выполнения «docker-compose-f <путь> up-d по ssh работает просто отлично? В чем разница между этими двумя случаями?

Комментарии:

1. вы не предоставили достаточно информации, чтобы ответить. Мое дикое предположение может заключаться в том, что вы запускаете его от другого пользователя по сравнению с вашим сеансом ssh.

Ответ №1:

Я нашел решение этой проблемы. Проблема в том, что поле файлы работало не так, как я ожидал.

Список имен файлов компоновки относительно project_src. Переопределяет docker-compose.yml или docker-compose.yaml. Файлы загружаются и объединяются в указанном порядке.

Я думал, что параметр files будет выполнять docker-compose-f <путь> для каждого элемента списка, определенного в параметре.

Я изменил свой код, чтобы использовать цикл, а не параметр files

  - name: Create and start services                                                                                                                  
  docker_compose:
    project_src: "{{ bitbucket__install_path }}/{{ item }}"                                                                                        
    state: present                                                                                                                                                                                                                    
  loop:
    - nginx
    - bitbucket 
 

Все закончилось успешно