2015-02-09 39 views
1

我正在使用Docker構建一個多容器應用程序。一切都適用於Django(1.7)開發服務器。但是當我嘗試運行gunicorn時,命令gunicorn wsgi:application似乎開始,然後不提供輸出並保持對終端的控制,直到我點擊了Ctrl - C。這令人遺憾地意味着我沒有什麼有用的調試信息。gunicorn爲什麼會掛在這個配置?

我的API的Dockerfile是這樣的:

FROM ubuntu:14.04 
MAINTAINER Garry Cairns 
ENV REFRESHED_AT 2015-01-13 

# update packages and prepare to build software 
RUN ["apt-get", "update"] 
RUN ["apt-get", "-y", "install", "build-essential", "vim", "git", "curl"] 
RUN ["locale-gen", "en_GB.UTF-8"] 

# install latest python 
RUN ["apt-get", "-y", "build-dep", "python3-dev", "python3-imaging"] 
RUN ["apt-get", "-y", "install", "python3-dev", "python3-imaging", "python3-pip"] 

# prepare postgreSQL support 
RUN ["apt-get", "-y", "build-dep", "python3-psycopg2"] 

# create a python user to run our programs 
RUN ["groupadd", "-r", "python"] 
RUN ["useradd", "-r", "-g", "python", "python"] 
WORKDIR /home/python 
ADD ./ /home/python 

# manage requirements 
ENV REQUIREMENTS_REFRESHED_AT 2015-02-09 
RUN ["pip3", "install", "-r", "requirements.txt"] 

我生產的設置(廣義上是18.11 Django的默認設置)都是這樣的時刻:

# -*- coding: utf-8 -*- 
''' 
Production Configurations 

- Use djangosecure 
- Use Amazon's S3 for storing static files and uploaded media 
- Use sendgrid to send emails 
- Use MEMCACHIER on Heroku 
''' 
from configurations import values 

# See: http://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html#settings 
try: 
    from S3 import CallingFormat 
    AWS_CALLING_FORMAT = CallingFormat.SUBDOMAIN 
except ImportError: 
    # TODO: Fix this where even if in Dev this class is called. 
    pass 

from .common import Common 


class Production(Common): 

    # INSTALLED_APPS 
    INSTALLED_APPS = Common.INSTALLED_APPS 
    # END INSTALLED_APPS 

    # SECRET KEY 
    SECRET_KEY = "Change me" # values.SecretValue() 
    # END SECRET KEY 

    # django-secure 
    INSTALLED_APPS += ("djangosecure",) 

    # set this to 60 seconds and then to 518400 when you can prove it works 
    SECURE_HSTS_SECONDS = 60 
    SECURE_HSTS_INCLUDE_SUBDOMAINS = values.BooleanValue(True) 
    SECURE_FRAME_DENY = values.BooleanValue(True) 
    SECURE_CONTENT_TYPE_NOSNIFF = values.BooleanValue(True) 
    SECURE_BROWSER_XSS_FILTER = values.BooleanValue(True) 
    SESSION_COOKIE_SECURE = values.BooleanValue(False) 
    SESSION_COOKIE_HTTPONLY = values.BooleanValue(True) 
    SECURE_SSL_REDIRECT = values.BooleanValue(True) 
    # end django-secure 

    # SITE CONFIGURATION 
    # Hosts/domain names that are valid for this site 
    # See https://docs.djangoproject.com/en/1.6/ref/settings/#allowed-hosts 
    ALLOWED_HOSTS = ["*"] 
    # END SITE CONFIGURATION 

    INSTALLED_APPS += ("gunicorn",) 

    # STORAGE CONFIGURATION 
    # See: http://django-storages.readthedocs.org/en/latest/index.html 
    INSTALLED_APPS += (
     'storages', 
    ) 

    # See: http://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html#settings 
    STATICFILES_STORAGE = DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 

    # See: http://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html#settings 
    AWS_ACCESS_KEY_ID = "test" # values.SecretValue() 
    AWS_SECRET_ACCESS_KEY = "test" # values.SecretValue() 
    AWS_STORAGE_BUCKET_NAME = "test" # values.SecretValue() 
    AWS_AUTO_CREATE_BUCKET = True 
    AWS_QUERYSTRING_AUTH = False 

    # AWS cache settings, don't change unless you know what you're doing: 
    AWS_EXPIRY = 60 * 60 * 24 * 7 
    AWS_HEADERS = { 
     'Cache-Control': 'max-age=%d, s-maxage=%d, must-revalidate' % (
      AWS_EXPIRY, AWS_EXPIRY) 
    } 

    # See: https://docs.djangoproject.com/en/dev/ref/settings/#static-url 
    STATIC_URL = 'https://s3.amazonaws.com/%s/' % AWS_STORAGE_BUCKET_NAME 
    # END STORAGE CONFIGURATION 

    # EMAIL 
    DEFAULT_FROM_EMAIL = values.Value('Correspondence <[email protected]>') 
    EMAIL_HOST = values.Value('smtp.sendgrid.com') 
    EMAIL_HOST_PASSWORD = "test" # values.SecretValue(environ_prefix="", environ_name="SENDGRID_PASSWORD") 
    EMAIL_HOST_USER = "test" # values.SecretValue(environ_prefix="", environ_name="SENDGRID_USERNAME") 
    EMAIL_PORT = values.IntegerValue(587, environ_prefix="", environ_name="EMAIL_PORT") 
    EMAIL_SUBJECT_PREFIX = values.Value('[Correspondence] ', environ_name="EMAIL_SUBJECT_PREFIX") 
    EMAIL_USE_TLS = True 
    SERVER_EMAIL = EMAIL_HOST_USER 
    # END EMAIL 

    # TEMPLATE CONFIGURATION 
    # See: https://docs.djangoproject.com/en/dev/ref/settings/#template-dirs 
    TEMPLATE_LOADERS = (
     ('django.template.loaders.cached.Loader', (
      'django.template.loaders.filesystem.Loader', 
      'django.template.loaders.app_directories.Loader', 
     )), 
    ) 
    # END TEMPLATE CONFIGURATION 

    # CACHING 
    # Only do this here because thanks to django-pylibmc-sasl and pylibmc 
    # memcacheify is painful to install on windows. 
    try: 
     # See: https://github.com/rdegges/django-heroku-memcacheify 
     from memcacheify import memcacheify 
     CACHES = memcacheify() 
    except ImportError: 
     CACHES = values.CacheURLValue(default="memcached://127.0.0.1:11211") 
    # END CACHING 

有興趣者還可以檢查出full project source 。任何人都知道這裏出了什麼問題?或者甚至我可以獲得更多有用的調試信息?

+0

您可以運行另一個進程在容器中獲得更多的信息? ('docker exec -it /bin/bash' – 2015-02-09 22:12:09

+0

@JavierCortejoso是的,我可以在容器中運行bash,這就是我試圖運行gunicorn的地方,讓我知道哪些信息可以幫助你,我會更新 – 2015-02-09 22:24:08

+0

你能發佈你正在運行的'gunicorn'命令嗎? – Alex 2015-02-10 00:07:06

回答

0

使用帶有gunicorn的--bind國旗。

例子:

gunicorn wsgi:application --bind:0.0.0.0:80