Issues getting Ansible to work with Boot2Docker - docker

I'm using an Ansible playbook to manage installation of Docker containers. I have the following playbook, which installs Cassandra:
I want to run this playbook locally, and have it install into Boot2Docker. I am able to SSH into Boot2Docker using the instructions from this answer:
$ 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:~$
I made an inventory file with the same SSH settings:
[local]
localhost ansible_ssh_port=2022 ansible_ssh_user=docker ansible_ssh_private_key_file=~/.ssh/id_boot2docker
But when I run the playbook, it fails with the error "/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
I still get the error even if "gather facts" is turned off. If I SSH into Boot2Docker, I can see that /usr/bin/python exists:
$ ssh -i $HOME/.ssh/id_boot2docker -p 2022 docker#localhost
...
docker#boot2docker:~$ which python

boot2docker ssh "tce-load -w -i python.tcz" does the trick as well (you need internet ;-)) for docker and ansible you will need "docker-py"
Setup pip, login to boot2docker
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip install docker-py
also add to your inventory file:
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

The solution was simple: Python isn't installed by default by Boot2Docker.
To install, run
$ boot2docker ssh "wget http://www.tinycorelinux.net/6.x/x86/tcz/python.tcz && tce-load -i python.tcz && rm -f python.tcz"
I created a script to do this automatically, see
https://gist.github.com/bcattle/90e64fbe808b3409ec2f

Related

Packet Manager on Hue bridge

I have successfully jailbreaked my Hue Bridge 2.1 and now have Root Access over SSH to it.
But I don't know how I can Install a Packet Manager (like opkg) on it.
It looks like wget is installed, but nothing else really. Also SCP works.
I have tried everything, but nothing seems to work. (See console). (Full console dump here)
login as: root
root#192.168.1.69's password:
BusyBox v1.23.2 (2018-10-25 16:12:28 UTC) built-in shell (ash)
_ _ _ _ ______ ____ _ _ ___ __ __
| | | | | | | ____| | _ \ (_) | | |__ \ \ \ / /
| |__| | | | | |__ | |_) |_ __ _ __| | __ _ ___ ) | \ V /
| __ | | | | __| | _ <| '__| |/ _` |/ _` |/ _ \ / / > <
| | | | |__| | |____ | |_) | | | | (_| | (_| | __/ / /_ _ / . \
|_| |_|\____/|______| |____/|_| |_|\__,_|\__, |\___| |____(_)_/ \_\
__/ |
|___/
----------------------------------------------------------------------
Version: 1810251352
----------------------------------------------------------------------
root#Wohnzimmer:~# busybox --install opkg
--install: applet not found
root#Wohnzimmer:~# opkg
-ash: opkg: not found
root#Wohnzimmer:~# wget
BusyBox v1.23.2 (2018-10-25 16:12:28 UTC) multi-call binary.
Usage: wget [-c|--continue] [-s|--spider] [-q|--quiet] [-O|--output-document FILE]
[--header 'header: value'] [-Y|--proxy on/off] [-P DIR]
[-U|--user-agent AGENT] URL...
Retrieve files via HTTP or FTP
-s Spider mode - only check file existence
-c Continue retrieval of aborted transfer
-q Quiet
-P DIR Save to DIR (default .)
-O FILE Save to FILE ('-' for stdout)
-U STR Use STR for User-Agent header
-Y Use proxy ('on' or 'off')
You can't just install the packet manager using busybox --install opkg orsudo apt-get install <any-package>.
This below error message clearly says the opkg packet is not found, you need to build the source, and add that in your target.
root#Wohnzimmer:~# busybox --install opkg
--install: applet not found
It's Busybox system for that you need to download the packet manager archive against the target what they are using, for example: if it is ARM then compile using ARM toolchain in your host system then move the compiled binary to the target. After moving the compiled utility you can place the binary in /sbin dir of the root fs.

Docker cannot `cd` to volume dir

Objective:
Create a docker volume
cd to that volume to check my contents
$ docker volume create hello_world
$ docker volume ls
DRIVER VOLUME NAME
local hello_world
$ docker inspect hello_world
[
{
"CreatedAt": "2018-11-19T05:37:03Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/mnt/sda1/var/lib/docker/volumes/hello_world/_data",
"Name": "hello_world",
"Options": {},
"Scope": "local"
}
]
$ cd /mnt
bash: cd: /mnt: No such file or directory
IF I cannot cd to the Mountpoint then where is it being saved?
Also tried this
$ docker-machine ssh default
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 18.06.1-ce, build HEAD : c7e5c3e - Wed Aug 22 16:27:42 UTC 2018
Docker version 18.06.1-ce, build e68fc7a
docker#default:~$ cd /mnt/sda1/var/lib/docker/volumes/hello_world/_data
-sh: cd: can't cd to /mnt/sda1/var/lib/docker/volumes/hello_world/_data
I am using Windows 8, Docker ToolBox

fuse 7 : Error executing command: by zero : when docker images is created

After Creating Docker Image from Redhat Fuse 7, I went inside container bin folder and executed ./clinet command.
Fuse client instance loaded
karaf#3e06e92ec257:/opt/karaf/bin$ ./client
Logging in as admin
____ _ _ _ _ _____
| _ \ ___ __| | | | | | __ _| |_ | ___| _ ___ ___
| |_) / _ \/ _` | | |_| |/ _` | __| | |_ | | | / __|/ _ \
| _ < __/ (_| | | _ | (_| | |_ | _|| |_| \__ \ __/
|_| \_\___|\__,_| |_| |_|\__,_|\__| |_| \__,_|___/___|
Red Hat Fuse (7.0.0.fuse-000191-redhat-1)
http://www.redhat.com/products/jbossenterprisemiddleware/fuse/
Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Open a browser to http://localhost:8181/hawtio to access the management console
Hit '<ctrl-d>' or 'shutdown' to shutdown Red Hat Fuse.
admin#root()>
but any key pressed, it returned below error and instance closed
admin#root()> Error executing command: / by zero
Sample Dockerfile and commands
docker run --name fuse -d -p 1099:1099 -p 8101:8101 -p 44444:44444 redhat-fuse-v1
docker exec -it fuse /opt/karaf/bin/client
docker logs -f fuse
FROM openjdk:8-slim
MAINTAINER Jayashankar C <jshankarc1#gmail.com>
ENV KARAF_USER karaf
ENV KARAF_UID 8181
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
ENV JAVA_MAX_MEM 256m
ENV KARAF_EXEC exec
COPY fuse-karaf-7.0.0.fuse-000191-redhat-1.zip /tmp/fuse-karaf.zip
COPY org.ops4j.pax.url.mvn.cfg /tmp
COPY users.properties /tmp
RUN groupadd -r $KARAF_USER --gid=$KARAF_UID && useradd -rm -g $KARAF_USER --uid=$KARAF_UID $KARAF_USER
RUN mkdir -p /opt/karaf \
&& unzip -o /tmp/fuse-karaf.zip -d /opt/karaf \
&& mv /opt/karaf/fuse-karaf-7.0.0.fuse-000191-redhat-1/* /opt/karaf > /dev/null 2>&1 \
&& ls /opt/karaf -ltr \
&& rm /tmp/fuse-karaf.zip \
&& cp -f /tmp/org.ops4j.pax.url.mvn.cfg opt/karaf/etc \
&& cp -f /tmp/users.properties opt/karaf/etc \
&& cat /opt/karaf/etc/org.ops4j.pax.url.mvn.cfg \
&& mkdir -p /opt/karaf/data /opt/karaf/data/log \
&& chown -R $KARAF_USER.$KARAF_USER /opt/karaf \
&& chmod 700 /opt/karaf/data
EXPOSE 1099 8101 44444
USER $KARAF_USER
CMD ["/opt/karaf/bin/karaf", "run"]
Error log
2018-05-31 18:14:21,757 | ERROR | h console user admin | o.a.k.s.s.ShellUtil | 143 - org.apache.karaf.shell.core - 4.2.0.fuse-000237-redhat-1 | Exception caught while executing command
java.lang.ArithmeticException: / by zero
at org.aesh.readline.Buffer.printInsertedData(Buffer.java:570) ~[141:org.apache.karaf.shell.aesh-jline:4.2.0.fuse-000237-redhat-1]
at org.aesh.readline.Buffer.insert(Buffer.java:227) ~[141:org.apache.karaf.shell.aesh-jline:4.2.0.fuse-000237-redhat-1]
at org.aesh.readline.AeshConsoleBuffer.writeChar(AeshConsoleBuffer.java:128) ~[141:org.apache.karaf.shell.aesh-jline:4.2.0.fuse-000237-redhat-1]
at org.aesh.readline.Readline$AeshInputProcessor.parse(Readline.java:262) ~[141:org.apache.karaf.shell.aesh-jline:4.2.0.fuse-000237-redhat-1]
at org.aesh.readline.Readline$AeshInputProcessor.access$100(Readline.java:174) ~[141:org.apache.karaf.shell.aesh-jline:4.2.0.fuse-000237-redhat-1]
at org.aesh.readline.Readline.readInput(Readline.java:95) ~[141:org.apache.karaf.shell.aesh-jline:4.2.0.fuse-000237-redhat-1]
at org.aesh.readline.Readline.access$1000(Readline.java:57) ~[141:org.apache.karaf.shell.aesh-jline:4.2.0.fuse-000237-redhat-1]
at org.aesh.readline.Readline$AeshInputProcessor.lambda$start$1(Readline.java:333) ~[141:org.apache.karaf.shell.aesh-jline:4.2.0.fuse-000237-redhat-1]
at org.jline.reader.impl.TerminalConnection.openBlocking(TerminalConnection.java:152) ~[141:org.apache.karaf.shell.aesh-jline:4.2.0.fuse-000237-redhat-1]
at org.jline.reader.impl.LineReaderImpl.readInput(LineReaderImpl.java:137) ~[141:org.apache.karaf.shell.aesh-jline:4.2.0.fuse-000237-redhat-1]
at org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:275) ~[141:org.apache.karaf.shell.aesh-jline:4.2.0.fuse-000237-redhat-1]
at org.apache.karaf.shell.impl.console.ConsoleSessionImpl.readCommand(ConsoleSessionImpl.java:436) [143:org.apache.karaf.shell.core:4.2.0.fuse-000237-redhat-1]
at org.apache.karaf.shell.impl.console.ConsoleSessionImpl.run(ConsoleSessionImpl.java:394) [143:org.apache.karaf.shell.core:4.2.0.fuse-000237-redhat-1]
at java.lang.Thread.run(Thread.java:748) [?:?]
If you look a bit earlier in the log, you'll find the following event:
852 [sshd-SshClient[3a82f6ef]-nio2-thread-3] DEBUG org.apache.sshd.client.channel.ChannelShell - doOpenPty(ChannelShell[id=0, recipient=0]-ClientSessionImpl[karaf#localhost/127.0.0.1:8101]) Send SSH_MSG_CHANNEL_REQUEST env: {TERM=null, LC_CTYPE=en.UTF-8}
The problem is the TERM=null environment variable which causes the NullPointerException.
You need to run the following command instead:
docker exec -it -e TERM=${TERM} fuse /opt/karaf/bin/client
On older docker versions, you can run the following:
docker exec -it fuse bash -c "export TERM=${TERM} /opt/karaf/bin/client"

docker mapping volume directory not showing up [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 6 years ago.
Improve this question
When I map a directory it doesn't show up in my docker container.
I am on docker 1.11.2 on Mac using toolbox.
calloway$ docker -v
Docker version 1.11.2, build b9f10c9
calloway$ ls -ltr /tmp/foo/
total 0
-rw-r--r-- 1 calloway wheel 0 Jun 8 09:21 regularfile.txt
calloway$ docker run -it -v /tmp/foo:/mytmp -w /mytmp ubuntu bash
root#26fc182f7964:/mytmp# ls
root#26fc182f7964:/mytmp# exit
More exploration: /tmp mapped is /tmp on "default" Virtual Machine.
Joshuas-MBP:~ joshuacalloway$ docker-machine ssh default
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.10.3, build master : 625117e - Thu Mar 10 22:09:02 UTC 2016
Docker version 1.10.3, build 20f81dd
docker#default:~$ mkdir /tmp/OnDefaultVM
docker#default:~$ touch /tmp/OnDefaultVM/myfile.txt
docker#default:~$ exit
Joshuas-MBP:~ joshuacalloway$ docker run -it -v /tmp/OnDefaultVM:/mytmp -w /mytmp ubuntu bash
root#1184ff43dc88:/mytmp# ls
myfile.txt

`foxx-manager update` fails inside corporate proxy environment

With docker 1.7.1, foxx-manager update gets error 500 when downloading master.zip from central repository. However, no error was occurred with docker 1.6.1.
Did anyone encounter this problem?
How can I specify https_proxy for arangosh? foxx-manager update fails inside corporate proxy environment.
I've tried these settings:
export https_proxy=http://xx.xx.xx.xx:port
export https_proxy=xx.xx.xx.xx:port
export HTTPS_PROXY=http://xx.xx.xx.xx:port
export HTTPS_PROXY=xx.xx.xx.xx:port
... and all failed.
Below is my session log:
[t.suwa#devstudy ~]$ docker run -d arangodb
e3175d53cd1fc288201bfeebaaf95084c1409c4299ce1b39369d131bf2964d0a
Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
[t.suwa#devstudy ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e3175d53cd1f arangodb "/usr/sbin/arangod" 11 seconds ago Up 9 seconds 8529/tcp backstabbing_albattani
[t.suwa#devstudy ~]$ docker exec -it e3175d53cd1f /bin/bash
root#8155996d26ff:/# arangosh
_
__ _ _ __ __ _ _ __ __ _ ___ ___| |__
/ _` | '__/ _` | '_ \ / _` |/ _ \/ __| '_ \
| (_| | | | (_| | | | | (_| | (_) \__ \ | | |
\__,_|_| \__,_|_| |_|\__, |\___/|___/_| |_|
|___/
Welcome to arangosh 2.6.7 [linux]. Copyright (c) ArangoDB GmbH
Using Google V8 4.1.0.27 JavaScript engine, READLINE 6.3, ICU 54.1
Pretty printing values.
Connected to ArangoDB 'tcp://127.0.0.1:8529' version: 2.6.7 [standalone], database: '_system', username: 'root'
Type 'tutorial' for a tutorial or 'help' to see common examples
arangosh [_system]> fm.update()
JavaScript exception in file '/usr/share/arangodb/js/common/modules/org/arangodb/foxx/store.js' at 410,11: [ArangoError 1752: application download failed: Github download from 'https://github.com/arangodb/foxx-apps/archive/master.zip' failed with error code 500]
! throw err;
! ^
stacktrace: Error
at exports.throwDownloadError (/usr/share/arangodb/js/common/modules/org/arangodb-common.js:448:9)
at Object.update (/usr/share/arangodb/js/common/modules/org/arangodb/foxx/store.js:392:7)
at <shell command>:1:4
If your environment is behind proxy, please add these in Dockerfile.
ENV https_proxy=http://xx.xx.xx.xx:port
ENV https_proxy=xx.xx.xx.xx:port
ENV HTTPS_PROXY=http://xx.xx.xx.xx:port
ENV HTTPS_PROXY=xx.xx.xx.xx:port
ADD .gitconfig /.gitconfig
Local file .gitconfig should have proxy setting as well:
[http]
proxy = http://xx.xx.xx.xx:port
[https]
proxy = http://xx.xx.xx.xx:port
Suspose you install and run the applicaiton with root in container, if not, copy .gitconfig to that user's home directory.
Build the image with proxy, then you should be fine to download the package within container.

Resources