docker-compose不启动postgres图像

我正在创build一个Django应用程序的docker-composeconfiguration,Dockerfile的构build成功,但是当我编写它们时,django返回一个问题 – 无法连接到posgres。

我运行docker-compose run web bash ,发现redis和posgres都无法连接。

我的docker-compose.yml文件:

 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 

错误信息,当我做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 

更新:

因为我设置了一个链接到其他图像,在主机172.17.0.67上的docker链接pg,我需要将pg主机设置为docker官方文档中未提及的那个地址。 (这个地址每次都会改变,但可以通过env得到)

现在,我又有了一个问题:

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

如果我更改命令python /workspace/BreadTripServer/webapps/manage.py runserver 0.0.0.0:8000 --settings=configs.local_defaultpython /workspace/BreadTripServer/webapps/manage.py runserver ,它工作正常,除了我无法达到网页。

它看起来像你的应用程序正在寻找localhost数据库。 它应该在主机db查找db (主机名将通过链接参数添加到/etc/hosts )。

在BUILD树的某处可能有一个名为settings.py的文件。 你可以通过键入以下命令来find它:

 find . -name settings.py 

一旦find,你需要编辑该文件。 它看起来像这样:

 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. } } 

看到“本地主机”? 将其更改为“db”(正如@Adrianbuild议的那样),您将解决这个问题。 (好吧,你会转到下一个问题:-))你应该给阿德里安信贷的答案。

我有这个问题,并抓住秸秆,当我遇到这样的答案: django.db.utils.OperationalError无法连接到服务器 。

解决scheme,为我工作,是杀死所有postgres进程使用

 sudo pkill postgres