Merge pull request #77 from orchardup/friendlier-connection-error

Friendlier connection error for docker-osx users
This commit is contained in:
Ben Firshman 2014-02-04 17:04:21 -08:00
commit f92317c5ee
2 changed files with 42 additions and 2 deletions

View File

@ -11,7 +11,7 @@ import yaml
from ..project import Project from ..project import Project
from .docopt_command import DocoptCommand from .docopt_command import DocoptCommand
from .formatter import Formatter from .formatter import Formatter
from .utils import cached_property, docker_url from .utils import cached_property, docker_url, call_silently, is_mac, is_ubuntu
from .errors import UserError from .errors import UserError
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -23,7 +23,29 @@ class Command(DocoptCommand):
try: try:
super(Command, self).dispatch(*args, **kwargs) super(Command, self).dispatch(*args, **kwargs)
except ConnectionError: except ConnectionError:
raise UserError(""" if call_silently(['which', 'docker']) != 0:
if is_mac():
raise UserError("""
Couldn't connect to Docker daemon. You might need to install docker-osx:
https://github.com/noplay/docker-osx
""")
elif is_ubuntu():
raise UserError("""
Couldn't connect to Docker daemon. You might need to install Docker:
http://docs.docker.io/en/latest/installation/ubuntulinux/
""")
else:
raise UserError("""
Couldn't connect to Docker daemon. You might need to install Docker:
http://docs.docker.io/en/latest/installation/
""")
elif call_silently(['which', 'docker-osx']) == 0:
raise UserError("Couldn't connect to Docker daemon - you might need to run `docker-osx shell`.")
else:
raise UserError("""
Couldn't connect to Docker daemon at %s - is it running? Couldn't connect to Docker daemon at %s - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable. If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

View File

@ -4,6 +4,8 @@ from __future__ import division
import datetime import datetime
import os import os
import socket import socket
import subprocess
import platform
from .errors import UserError from .errors import UserError
@ -108,3 +110,19 @@ def split_buffer(reader, separator):
if len(buffered) > 0: if len(buffered) > 0:
yield buffered yield buffered
def call_silently(*args, **kwargs):
"""
Like subprocess.call(), but redirects stdout and stderr to /dev/null.
"""
with open(os.devnull, 'w') as shutup:
return subprocess.call(*args, stdout=shutup, stderr=shutup, **kwargs)
def is_mac():
return platform.system() == 'Darwin'
def is_ubuntu():
return platform.system() == 'Linux' and platform.linux_distribution()[0] == 'Ubuntu'