-
-
Save iansinnott/0a0c212260386bdbfafb to your computer and use it in GitHub Desktop.
| #!/bin/bash | |
| # A wrapper for the docker binary. Checks to make sure the docker host is | |
| # set before executing docker commands. | |
| docker() { | |
| # Start the daemon if it's not running | |
| if [ $(boot2docker status) != 'running' ]; then | |
| echo 'Starting the Docker daemon.' | |
| boot2docker start | |
| fi | |
| if [ -z $DOCKER_HOST ] || [ -z $DOCKER_IP ]; then | |
| # Store the docker binary path | |
| DOCKER=$(which docker) | |
| # All 'echo' commands are unecessary, but it lets you know | |
| # if this block of code was run or not. | |
| echo 'Setting Docker host...' | |
| # Grab the ip address from boot2socker. DOCKER_IP is not | |
| # necessary to run docker, but it comes in handy (see readme). | |
| export DOCKER_IP=$(boot2docker ip 2>/dev/null) | |
| export DOCKER_HOST="tcp://$DOCKER_IP:2375" | |
| # Confirm that variables were exported via the command line. | |
| echo " DOCKER_IP=$DOCKER_IP" | |
| echo " DOCKER_HOST=$DOCKER_HOST"; echo | |
| fi | |
| # Execute docker with all arguments. | |
| DOCKER "$@" | |
| } |
One suggestion, and let me know if this doesn't make sense:
You have the DOCKER_HOST port hardcoded and I noticed right away that sometimes b2d will start with 2376 instead. This means the script will result in:
FATA[0000] Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
I think the better option would be to replace the exporting of $DOCKER_HOST with $(boot2docker shellinit) as this sets them properly
What @MrMMorris said. Here's what's in my .zshrc file now.
boot2docker up
eval `boot2docker shellinit`Edit: You could probably put an if statement around that boot2docker up to not run it when it's already up.
Pipe stderr to /dev/null if you don't want the "Writing ..." messages to appear.
eval $(boot2docker shellinit 2>/dev/null)Using this script didn't work immediately for me as I got:
malformed HTTP response "\x15\x03\x01\x00\x02\x02". Are you trying to connect to a TLS-enabled daemon without TLS?
Maybe because Docker (at least in version 1.7?) uses port 2376 by default (and not 2375)? I added the following to make things work.
export DOCKER_CERT_PATH=$HOME/.boot2docker/certs/boot2docker-vm/
export DOCKER_TLS_VERIFY=1
you are amazing