无法使用Ansible on Vagrant框启动Docker服务

时间:2018-06-08 10:34:31

标签: ansible vagrant

---
- hosts: vagrant
  remote_user: root
  become_method: sudo
  tasks:
        - name: Start service docker, if not running
          service:
               name: docker
               state: started
  

错误:致命:[192.168.1.16]:失败! => {“已更改”:false,“msg”:   “无法启动服务泊坞:无法启动docker.service:   需要交互式身份验证。\ n请参阅系统日志和'systemctl   状态docker.service'了解详情。\ n“}

我想使用Ansible启动Docker到其他主机(Vagrant)。我可以和Ansible一起ping两个主机。但它不适用于Vagrant主持人。

知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

根本原因

在使用默认设置的Vagrant中使用Ansible配置程序时,将忽略playbook中的remote_user设置(问题中为remote_user: root)。

说明

"常规"之间有一个important difference Ansible中关于优先级的变量和连接变量:

  

要考虑的另一个重要事项(对于所有版本)是连接变量覆盖config,命令行和播放/角色/任务特定选项和指令。例如:

ansible -u lola myhost
     

这仍将作为ramon连接,因为ansible_ssh_user在myhost的库存中设置为ramon。对于播放/任务,对于remote_user也是如此:

- hosts: myhost
  tasks:
   - command: i'll connect as ramon still
     remote_user: lola
     

这样做是因为特定于主机的设置可以覆盖常规设置。

由于您使用的是Vagrant,它会在目录.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory下创建一个清单文件,默认情况下(也取决于框的侮辱)指定内部ansible_user='vagrant',这意味着{{1被默认设置覆盖。

Vagrant docs中也提到了这一点:

  

remote_user: root(布尔值) - 要求Vagrant在生成的库存中设置force_remote_user设置,或在使用静态库存时作为额外变量。 然后,所有Ansible ansible_ssh_user参数将被Vagrant SSH设置的remote_user值覆盖。

     

如果此选项设置为config.ssh.username,Vagrant会将Vagrant SSH用户名设置为默认的Ansible远程用户,但仍会考虑Ansible游戏或任务的false参数,从而覆盖Vagrant配置。

     

默认值为remote_user

解决方案

你可以:

  • 通过将true添加到整个游戏或单个任务来修改您的游戏;

  • 在Vagrant文​​件中将become: true设置为force_remote_user;

  • 在Vagrantfile中将false设置为config.ssh.username

第一个是更好的方式。

答案 1 :(得分:-2)

  

需要交互式身份验证   似乎远程运行 sudo 命令的用户需要sudo操作的密码,因为没有提供它的终端,它就会失败。

尝试使用有权运行sudo命令的远程用户,而无需进行身份验证。

您还可以使用“ansible_sudo_pass”指定远程提供的密码。