Skip to content

Instantly share code, notes, and snippets.

@mikeslattery
Last active March 5, 2019 15:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mikeslattery/0a3e2ca45ea1bd424dbb6cf96f65782e to your computer and use it in GitHub Desktop.
Save mikeslattery/0a3e2ca45ea1bd424dbb6cf96f65782e to your computer and use it in GitHub Desktop.
#!/bin/bash
# Wrapper over docker-compose to run on remote server.
# Usage:
# Takes same arguments as docker-compose.
# Typical usage:
# remote-compose server down
# remote-compose server up --no-build -d
# (In a 2nd terminal:)
# remote-compsoe server logs -f --tail=0
# Requirements/Restrictions:
# * ssh key-based login only. (no password)
# * User must be in 'docker' group on server
# * Required apps: bash, ssh, nc, docker-compose
set -euo pipefail
server="${1}"; shift
endpoint="${endpoint:-localhost}"
port="${port:-2377}"
export COMPOSE_HTTP_TIMEOUT=180
# Start proxy
while nc -z "$endpoint" "$port"; do port="$(( $RANDOM + 1024 ))"; done
ssh -qnNT -L "${endpoint}:${port}:/var/run/docker.sock" "${server}" &
trap "kill $!" TERM INT EXIT
sleep 1
while ! nc -z "$endpoint" "$port"; do sleep 1; done
export DOCKER_HOST="tcp://${endpoint}:${port}"
docker-compose "$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment