docker сеть не соединяет мои услуги вместе - PullRequest
0 голосов
/ 26 февраля 2020

У меня проблема с сетью docker, не соединяющей мои сервисы вместе, у меня есть изображение postgres и изображение python, которым необходимо их подключение, но в тот момент, когда я звоню, чтобы подключиться к postgres сервис от python сервис моего соединения отказано. Я попытался открыть порт 5432 и все узлы, чтобы посмотреть, смогу ли я получить какое-либо соединение, но произойдет та же ошибка, попытался использовать имя службы для подключения к нему, и та же проблема продолжает возникать. у кого есть идеи почему?

=========================================Django settings.py==============================================
DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.postgresql_psycopg2',
                'NAME': 'postgres',
                'USER': 'postgres',
                'PASSWORD': 'postgres',
                'HOST': 'db',
                'PORT': '5432',
        }
    }
......
ALLOWED_HOSTS = ['*']

========================================Error==========================================================


ERROR: Service 'web' failed to build: The command '/bin/sh
-c python manage.py makemigrations' returned a non-zero code: 1
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 217, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 195, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/usr/local/lib/python3.7/site-packages/psycopg2/__init__.py", line 126, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not translate host name "db" to address: No address associated with hostname
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/commands/makemigrations.py", line 101, in handle
    loader.check_consistent_history(connection)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/loader.py", line 283, in check_consistent_history
    applied = recorder.applied_migrations()
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/recorder.py", line 73, in applied_migrations
    if self.has_table():
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/recorder.py", line 56, in has_table
    return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 256, in cursor
    return self._cursor()
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 233, in _cursor
    self.ensure_connection()
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 217, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.7/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 217, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 195, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/usr/local/lib/python3.7/site-packages/psycopg2/__init__.py", line 126, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not translate host
name "db" to address: No address associated with hostname

=============================Docker Compose File=================================

version: "3"

services:
  db:
    image: postgres:12
    volumes:
      - /home/--path-to-folder/data/postgres:/var/lib/postgresql/data
    restart: always
    environment:
      POSTGRES_PASSWORD: postgres
    ports:
      - "5432:5432"

  web:
    build: ./backend
    command: sh -c "python backend/manage.py makemigrations && python backend/manage.py migrate && python backend/manage.py runserver 0.0.0.0:8000"
    # command: python3 app/backend/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/backend
    links:
      - db
    ports:
      - "8000:8000"
    depends_on:
      - db

  # frontend:
  #   build: ./frontend
  #   command: serve -s build -l 3000
  #   volumes:
  #     - ./frontend:/app/frontend
  #   ports:
  #     - "3000:3000"
  #   depends_on:
  #     - db

volumes:
  postgres_data:

Ответы [ 3 ]

0 голосов
/ 27 февраля 2020

Удалите links: db, это не нужно и возможно влияет, так как docker -композитные сервисы по умолчанию подключаются друг к другу по именам. Также в моем случае я использовал networks:default:external и networks:default:aliases для некоторых услуг, но на этот раз это не ваш случай.

0 голосов
/ 28 февраля 2020

Не могли бы вы попытаться удалить раздел ports для службы db?

Действительно, вам не нужно публиковать порты sh на хосте, поскольку это служба web, которая подключится к услуге db, никто другой.

0 голосов
/ 26 февраля 2020

Возможно, ваш "db" не инициализирован до того, как "web" вы добавили depends_on, он будет проверять все зависимости перед загрузкой веб.

В вашем добавлении "web",

depends_on:
  - db
...