使Ansible能够与Boot2Docker一起使用的问题
我正在使用Ansible手册来pipe理Docker容器的安装。 我有以下的剧本,安装Cassandra:
我想在本地运行这个剧本,并将其安装到Boot2Docker中。 我能够使用从这个答案的指示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
但是,当我运行的剧本,它会失败,错误“ /bin/sh: /usr/bin/python: not found
”:
$ 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
即使“收集事实”被closures,我仍然会收到错误信息。 如果我SSH到Boot2Docker,我可以看到/usr/bin/python
存在:
$ ssh -i $HOME/.ssh/id_boot2docker -p 2022 docker@localhost ... docker@boot2docker:~$ which python
boot2docker ssh "tce-load -w -i python.tcz"
也是这样做的(你需要互联网;-))对于docker工人而言,你将需要“docker-py”
- 安装pip,login到boot2docker
-
wget https://bootstrap.pypa.io/get-pip.py
-
python get-pip.py
-
pip install docker-py
也添加到您的库存文件中:
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
该解决scheme很简单:由Boot2Docker默认不安装Python。
要安装,运行
$ boot2docker ssh "wget http://www.tinycorelinux.net/6.x/x86/tcz/python.tcz && tce-load -i python.tcz && rm -f python.tcz"
我创build了一个脚本来自动执行此操作,请参阅https://gist.github.com/bcattle/90e64fbe808b3409ec2f