让Ansible与Boot2Docker一起工作的问题

时间:2015-06-02 20:15:34

标签: docker ansible boot2docker

我使用Ansible playbook来管理Docker容器的安装。我有以下剧本,安装Cassandra:

我想在本地运行此playbook,并将其安装到Boot2Docker中。我可以使用this answer

中的说明SSH到Boot2Docker
$ ssh -i $HOME/.ssh/id_boot2docker -p 2022 docker@localhost
                        ##        .
                  ## ## ##       ==
               ## ## ## ##      ===
           /""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
           \______ o          __/
             \    \        __/
              \____\______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.4.1, build master : 86f7ec8 - Tue Dec 16 23:11:29 UTC 2014
Docker version 1.4.1, build 5bc2ff8
docker@boot2docker:~$

我使用相同的SSH设置创建了一个库存文件:

[local]
localhost ansible_ssh_port=2022 ansible_ssh_user=docker ansible_ssh_private_key_file=~/.ssh/id_boot2docker

但是当我运行剧本时,它失败并出现错误&#34; /bin/sh: /usr/bin/python: not found&#34;:

$ ansible-playbook db-setup.yml -i hosts.local

PLAY [local] ****************************************************************** 

GATHERING FACTS *************************************************************** 
failed: [localhost] => {"failed": true, "parsed": false}
/bin/sh: /usr/bin/python: not found
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: /etc/ssh_config line 102: Applying options for *
debug1: auto-mux: Trying existing master
debug1: mux_client_request_session: master session id: 2
Shared connection to localhost closed.


TASK: [Database] ************************************************************** 
FATAL: no hosts matched or all hosts have already failed -- aborting


PLAY RECAP ******************************************************************** 
       to retry, use: --limit @/Users/bryan/db-setup.retry
localhost                  : ok=0    changed=0    unreachable=0    failed=1   

即使&#34;收集事实&#34;我仍然会收到错误。被关闭了。如果我通过SSH连接到Boot2Docker,我可以看到/usr/bin/python存在:

$ ssh -i $HOME/.ssh/id_boot2docker -p 2022 docker@localhost
... 
docker@boot2docker:~$ which python

2 个答案:

答案 0 :(得分:3)

boot2docker ssh "tce-load -w -i python.tcz"也可以解决这个问题(你需要互联网;-))对于docker和ansible你需要“docker-py”

  1. 设置点,登录boot2docker
  2. wget https://bootstrap.pypa.io/get-pip.py
  3. python get-pip.py
  4. pip install docker-py
  5. 还会添加到您的广告资源文件中:

    dockerhost ansible_connection=ssh ansible_ssh_host=192.168.59.103 ansible_ssh_user=docker ansible_ssh_private_key_file=~/.ssh/id_boot2docker ansible_python_interpreter=/usr/local/bin/python
    

答案 1 :(得分:1)

解决方案很简单:Boot2Docker默认不安装Python。

要安装,请运行

$ boot2docker ssh "wget http://www.tinycorelinux.net/6.x/x86/tcz/python.tcz && tce-load -i python.tcz && rm -f python.tcz"

我创建了一个自动执行此操作的脚本,请参阅 https://gist.github.com/bcattle/90e64fbe808b3409ec2f