簡體   English   中英

ansible docker-compose 模塊,ansible 的結果與主機上的 ssh 不同

[英]ansible docker-compose module, different result from ansible than over ssh on the host

我的 Ansible Bitbucket 角色中有一個任務,它只是啟動兩個 docker-compose.yml 文件。 當從 Ansible 執行它時它會失敗,但是當我在實際服務器上通過 ssh 執行相同的命令時它工作得很好。 我目前正在以 root 身份執行我的劇本,當我手動執行 docker-compose -f <path> up -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 命令:

ansible-playbook -i inventory/staging playbooks/bitbucket-server.yml -vvvv -kKu root --ask-vault-pass --start-at-task "Setup bitbucket"

Ansible 成功啟動了 3 個容器中的 2 個,但第三個因錯誤而崩潰:

來自守護進程的錯誤響應:OCI 運行時創建失敗:container_linux.go:380:導致啟動容器進程:exec:“/my_entrypoint.sh”:權限被拒絕:未知錯誤:無法啟動容器:nginx_bitbucket_1

我的問題是,為什么 Ansible 在執行上述任務時會收到錯誤,同時執行“docker-compose -f <path> up -d over ssh 工作正常?這兩種情況有什么區別?”

我找到了這個問題的解決方案。 問題是 files 字段沒有按我預期的那樣運行。

相對於 project_src 的 Compose 文件名列表。 覆蓋 docker-compose.yml 或 docker-compose.yaml。 文件按給定的順序加載和合並。

我認為 files 參數會在參數中定義的每個列表元素上執行 docker-compose -f <path> 。

我更改了代碼以使用循環而不是 files 參數

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

它成功完成

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM