2017-02-11 2 views
0

Ich bin neu in Docker und ich möchte meine Django-Website in einem Andock-Container setzen. Ich habe Setup die Behälter wie hier beschrieben: http://michal.karzynski.pl/blog/2015/04/19/packaging-django-applications-as-docker-container-images/Start Postgres Service in Docker Eintrag Skript

Ich habe auch einen Eintrag Skript entryPointScript.sh genannt, den Folgendes enthält:



    #!/bin/bash 
    service postgresql start 
    sleep 2s #sleep for two seconds 
    source /srv/project/EnvProject/bin/activate 
    python /srv/project/manage.py collectstatic --noinput # Collect static files 
    python /srv/project/manage.py migrate_schemas     # Apply database migrations 

    # Prepare log files and start outputting logs to stdout 
    touch /srv/logs/gunicorn.log 
    touch /srv/logs/access.log 
    tail -n 0 -f /srv/logs/*.log & 

    # Start Gunicorn processes 
    #echo Starting Gunicorn. 
    # exec gunicorn project.wsgi:application \ 
    #  --name project \ 
    #  --bind 0.0.0.0:8000 \ 
    #  --workers 3 \ 
    #  --log-level=info \ 
    #  --log-file=/srv/logs/gunicorn.log \ 
    #  --access-logfile=/srv/logs/access.log \ 
    #  "[email protected]" 

    #Export Python Path 
    PYTHONPATH=/srv/project/Envproject/bin 

    # Start Uwsgi Process 
    echo Starting Uwsgi 
    exec uwsgi 
     --http :8000 
     --socket 0.0.0.0:8000 
     --home /srv/project/Envproject/ 
     --chdir /srv/project/project 
     --wsgi-file /srv/project/project/wsgi.py 
     --uid root 
     --pythonpath /srv/project/Envproject/ 

Allerdings, wenn ich den Behälter mit dem folgenden Befehl starten:

docker run -i -t --entrypoint=/entryPointScript.sh nikssardana/project

Django wirft einen Fehler:

django.db.utils.OperationalError: FATAL: the database system is starting up 

Ich denke, der Postgresql-Dienst dauert zu lange, um zu starten. Wie kann ich den Fehler vermeiden?

+0

http://stackoverflow.com/q/35069027/1005215 –

+0

@NehalJWani Ich sah die Antwort dort erwähnt und schrieb ein Skript, das etwas ähnliches wie das Python-Skript in dieser Antwort tut. Immer wenn ich versuche, eine Verbindung zum Server herzustellen, heißt es: "FATAL: Das Datenbanksystem wird gestartet" –

+0

Ich schätze, das Problem ist gelöst. Nach etwa einer Minute wird eine Verbindung zur Datenbank hergestellt. –

Antwort

0

Ich schrieb das folgende Skript zu prüfen, ob der PostgreSQL-Server oder nicht

 
#Check if postgres is running or not 
    import psycopg2 
    import time 

    while True: 
     try: 
      conn = psycopg2.connect("dbname='wottaspace' user='root' host='localhost' password='root'") 
      print 'connected' 
      break 
     except Exception as ex: 
      print ex 
      time.sleep(0.5) 

 

und umfasste dieses Skript anstelle der sleep 2s Anweisung ausgeführt wird. Problem gelöst!