2015-05-06 7 views
5

Ich erstelle ein docker-komponieren config für eine Django-App, die Dockerfile baut erfolgreich, aber wenn ich sie zusammensetze, django ein Problem zurückgeben - kann keine Verbindung zu posgres.docker-komponieren startet nicht postgres image

Ich laufe docker-compose run web bash, gefunden redis und posgres beide können nicht verbunden werden.

Meine Docker-compose.yml Datei:

db: 
    image: postgres:9.1 
    environment: 
    - POSTGRES_PASSWORD=mysecretpassword 

redis: 
    image: redis:2.8 

web: 
    links: 
    - db 
    - redis 
    build: . 
    volumes: 
    - .:/workspace 
    ports: 
    - "8000:8000“ 
    command: python /workspace/BreadTripServer/webapps/manage.py runserver 0.0.0.0:8000 --settings=configs.local_default 

Fehlerinfo, wenn ich docker-compose up:

sudo docker-compose up 
Recreating breadtrip_db_1... 
Recreating breadtrip_redis_1... 
Recreating breadtrip_web_1... 
Attaching to breadtrip_redis_1, breadtrip_web_1 
redis_1 | [1] 06 May 06:07:30.469 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf 

... 

redis_1 | [1] 06 May 06:07:30.490 # Server started, Redis version 2.8.19 
redis_1 | [1] 06 May 06:07:30.490 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 
redis_1 | [1] 06 May 06:07:30.490 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. 
redis_1 | [1] 06 May 06:07:30.491 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 
redis_1 | [1] 06 May 06:07:30.491 * DB loaded from disk: 0.000 seconds 
redis_1 | [1] 06 May 06:07:30.491 * The server is now ready to accept connections on port 6379 
web_1 | Traceback (most recent call last): 
web_1 | File "/workspace/BreadTripServer/webapps/manage.py", line 14, in <module> 
web_1 |  execute_manager(settings) 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 438, in execute_manager 
web_1 |  utility.execute() 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 379, in execute 
web_1 |  self.fetch_command(subcommand).run_from_argv(self.argv) 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 191, in run_from_argv 
web_1 |  self.execute(*args, **options.__dict__) 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 209, in execute 
web_1 |  translation.activate('en-us') 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/utils/translation/__init__.py", line 100, in activate 
web_1 |  return _trans.activate(language) 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/utils/translation/trans_real.py", line 202, in activate 
web_1 |  _active.value = translation(language) 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/utils/translation/trans_real.py", line 185, in translation 
web_1 |  default_translation = _fetch(settings.LANGUAGE_CODE) 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/utils/translation/trans_real.py", line 162, in _fetch 
web_1 |  app = import_module(appname) 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py", line 35, in import_module 
web_1 |  __import__(name) 
web_1 | File "/workspace/BreadTripServer/webapps/lib/haystack/__init__.py", line 83, in <module> 
web_1 |  backend = load_backend(settings.HAYSTACK_SEARCH_ENGINE) 
web_1 | File "/workspace/BreadTripServer/webapps/lib/haystack/__init__.py", line 57, in load_backend 
web_1 |  return importlib.import_module('haystack.backends.%s_backend' % backend_name) 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py", line 35, in import_module 
web_1 |  __import__(name) 
web_1 | File "/workspace/BreadTripServer/webapps/lib/haystack/backends/__init__.py", line 6, in <module> 
web_1 |  from django.db.models import Q 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/db/__init__.py", line 78, in <module> 
web_1 |  connection = connections[DEFAULT_DB_ALIAS] 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 94, in __getitem__ 
web_1 |  conn = backend.DatabaseWrapper(db, alias) 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/contrib/gis/db/backends/postgis/base.py", line 11, in __init__ 
web_1 |  self.ops = PostGISOperations(self) 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/contrib/gis/db/backends/postgis/operations.py", line 91, in __init__ 
web_1 |  vtup = self.postgis_version_tuple() 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/contrib/gis/db/backends/postgis/operations.py", line 445, in postgis_version_tuple 
web_1 |  version = self.postgis_lib_version() 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/contrib/gis/db/backends/postgis/operations.py", line 425, in postgis_lib_version 
web_1 |  return self._get_postgis_func('postgis_lib_version') 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/contrib/gis/db/backends/postgis/operations.py", line 406, in _get_postgis_func 
web_1 |  cursor = self.connection._cursor() 
web_1 | File "/usr/local/lib/python2.7/dist-packages/django/db/backends/postgresql_psycopg2/base.py", line 140, in _cursor 
web_1 |  self.connection = Database.connect(**conn_params) 
web_1 | File "/usr/local/lib/python2.7/dist-packages/psycopg2/__init__.py", line 179, in connect 
web_1 |  connection_factory=connection_factory, async=async) 
web_1 | psycopg2.OperationalError: could not connect to server: Connection refused 
web_1 | Is the server running on host "localhost" (::1) and accepting 
web_1 | TCP/IP connections on port 5432? 
web_1 | could not connect to server: Connection refused 
web_1 | Is the server running on host "localhost" (127.0.0.1) and accepting 
web_1 | TCP/IP connections on port 5432? 
web_1 | 
breadtrip_web_1 exited with code 1 

Update:

Weil ich einen Link zu anderen Bild gesetzt, verknüpft Docker pg auf host 172.17.0.67, muss ich den pg-host auf die adresse setzen, die in den offiziellen docks von docker nicht erwähnt wird. (Die Adresse würde jedes Mal ändern, kann aber durch env geholt werden)

Nun, ich ein anderes Thema bekam:

web_1 | Unknown command: 'runserver' 
web_1 | Type 'manage.py help' for usage. 
breadtrip_web_1 exited with code 1 

Wenn ich den Befehl python /workspace/BreadTripServer/webapps/manage.py runserver 0.0.0.0:8000 --settings=configs.local_default-python /workspace/BreadTripServer/webapps/manage.py runserver ändern, funktioniert es OK, außer ich das nicht erreichen kann Website.

Antwort

6

Ihre Anwendung sucht wahrscheinlich nach der Datenbank unter localhost. Es sollte nach der DB auf dem Host db suchen (der Host-Name wurde /etc/hosts durch das Argument Link hinzugefügt werden).

+1

Dies ist, was die offizielle Demo aussieht, was ich brauche tun – kxxoling

+0

die Gastgeber setzen rechts habe ich keine Ahnung, was Ihr Quellcode sieht aus wie. Im Code wird es einen Punkt geben, wo es sich mit der DB verbindet. Sie müssen dies auf "db" einstellen. Es kann derzeit auf "localhost" oder "127.0.0.1" festgelegt werden, oder es ist möglicherweise nicht angegeben. –

+0

Ursache Ich setze den Link, docker verknüpfte pg auf Host 172.17.0.67, muss ich den PG-Host auf die Adresse, die nicht in Docker offizielle Dokumente erwähnt. – kxxoling

3

irgendwo in Ihrem BUILD-Baum befindet sich wahrscheinlich eine Datei namens settings.py. Sie können dies finden, indem Sie den folgenden Befehl eingeben:

find . -name settings.py 

einmal gefunden, müssen Sie diese Datei bearbeiten. Es wird in etwa so aussehen:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 
     'NAME': 'mydb',      # Or path to database file if using sqlite3. 
     # The following settings are not used with sqlite3: 
     'USER': 'myuser', 
     'PASSWORD': 'password', 
     'HOST': 'localhost',      # Empty for localhost through domain sockets or   '127.0.0.1' for localhost through TCP. 
     'PORT': '',      # Set to empty string for default. 
    } 
} 

siehe 'localhost'? Ändere das in "db" (wie @ Adrian vorgeschlagen hat) und du wirst das gelöst haben. (Nun, Sie werden mit dem nächsten Problem weitermachen :-)) Sie sollten Adrian Kredit für die Antwort geben.

+0

Aber warum ich meine Seite nicht starten kann durch 'python /workspace/BreadTripServer/webapps/manage.py runserver 0.0.0.0:8000 --settings = configs.local_default' – kxxoling

+2

ich weiß es nicht. Ihre Komponenten sind falsch konfiguriert.Um sie richtig zu konfigurieren, muss die Konfiguration so geändert werden, dass die bereitgestellten Variablen (/ etc/hosts oder env-Variablen) korrekt verwendet werden. Ihr mitgelieferter Traceback versucht eindeutig, postgres bei localhost zu öffnen, postgres ist nicht bei localhost, postgres ist bei db. Sie sagen, das ist die offizielle Demo. Kannst du einen Link zur offiziellen Demo von breadtripserver bereitstellen? Ich kann dort nachsehen und herausfinden, was das Problem ist. – Greg

+0

Sie haben Recht! Jetzt arbeite ich gerade an der nächsten Ausgabe. – kxxoling