2017-02-11 8 views
0

Я новичок в докере, и я хочу разместить свой сайт django внутри контейнера докеров. Я имею установку контейнера, как описано здесь: http://michal.karzynski.pl/blog/2015/04/19/packaging-django-applications-as-docker-container-images/Запуск службы postgres в сценарии ввода докеров

Я также создал сценарий ввода имени entryPointScript.sh, который содержит следующее:



    #!/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/ 

Однако, когда я начинаю контейнер, используя следующую команду:

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

Джанго выдает ошибку:

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

Я думаю, что служба postgresql занимает слишком много времени, чтобы начать. Как я могу избежать ошибки?

+0

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

+0

@NehalJWani Я видел ответ, упомянутый там, и написал сценарий, который в этом ответе делает что-то похожее на скрипт python. Всякий раз, когда я пытаюсь подключиться к серверу, он говорит: «FATAL: система базы данных запускается» –

+0

Я думаю, проблема решена. После ожидания в течение одной минуты он подключается к базе данных. –

ответ

0

Я написал следующий сценарий, чтобы проверить, является ли сервер PostgreSQL работает или не

 
#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) 

 

И включил этот сценарий вместо sleep 2s заявления. Задача решена!

Смежные вопросы