質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.49%

djangoのapiサーバーとpostgresqlをdocker-composeで通信を行いたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 276

score 50

docker-composeを用いてdjangoのapiサーバーとpostgresqlのdbをdocker-composeで通信を行いたいと考えています。
うまく通信ができていないので、ここで質問させていただきます。
docke-compose.ymlは以下のようになっています。

version: "3"

services:
  db:
    container_name: db
    image: postgres:12.0-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_USER=djangodb_user
      - POSTGRES_PASSWORD=kao7423
      - POSTGRES_DB=django-db
    ports:
      - 5423:5423
  rest_api:
    container_name: todo_api
    build:
      context: .
      dockerfile: Dockerfile.api
    volumes:
      - ./backend/:/backend
    tty: true
    ports:
      - 8000:8000
      - 3000:3000
      # - 5423:5423
    depends_on:
      - db
    command: python manage.py runserver 0.0.0.0:8000
volumes:
  postgres_data:

で行っております。
また、backend/setting.pyのdbの設定は、

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'django-db', 
        'USER': 'djangodb_user', 
        'PASSWORD': 'password', 
        'HOST': '0.0.0.0',
        'PORT': 5423,
    }
}

です。
また、吐かれたエラーは、

db          | 2021-02-03 06:52:52.041 UTC [1] LOG:  starting PostgreSQL 12.0 on aarch64-unknown-linux-musl, compiled by gcc (Alpine 8.3.0) 8.3.0, 64-bit
db          | 2021-02-03 06:52:52.041 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db          | 2021-02-03 06:52:52.041 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db          | 2021-02-03 06:52:52.190 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db          | 2021-02-03 06:52:52.389 UTC [19] LOG:  database system was shut down at 2021-02-03 06:50:36 UTC
db          | 2021-02-03 06:52:52.469 UTC [1] LOG:  database system is ready to accept connections
todo_api    | Watching for file changes with StatReloader
todo_api    | Performing system checks...
todo_api    | 
todo_api    | System check identified no issues (0 silenced).
todo_api    | Exception in thread django-main-thread:
todo_api    | Traceback (most recent call last):
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
todo_api    |     self.connect()
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
todo_api    |     return func(*args, **kwargs)
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect
todo_api    |     self.connection = self.get_new_connection(conn_params)
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
todo_api    |     return func(*args, **kwargs)
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection
todo_api    |     connection = Database.connect(**conn_params)
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
todo_api    |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
todo_api    | psycopg2.OperationalError: could not connect to server: Connection refused
todo_api    |     Is the server running on host "0.0.0.0" and accepting
todo_api    |     TCP/IP connections on port 5423?
todo_api    | 
todo_api    | 
todo_api    | The above exception was the direct cause of the following exception:
todo_api    | 
todo_api    | Traceback (most recent call last):
todo_api    |   File "/opt/conda/lib/python3.8/threading.py", line 932, in _bootstrap_inner
todo_api    |     self.run()
todo_api    |   File "/opt/conda/lib/python3.8/threading.py", line 870, in run
todo_api    |     self._target(*self._args, **self._kwargs)
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/utils/autoreload.py", line 53, in wrapper
todo_api    |     fn(*args, **kwargs)
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 121, in inner_run
todo_api    |     self.check_migrations()
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/core/management/base.py", line 459, in check_migrations
todo_api    |     executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/migrations/executor.py", line 18, in __init__
todo_api    |     self.loader = MigrationLoader(self.connection)
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/migrations/loader.py", line 53, in __init__
todo_api    |     self.build_graph()
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/migrations/loader.py", line 216, in build_graph
todo_api    |     self.applied_migrations = recorder.applied_migrations()
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 77, in applied_migrations
todo_api    |     if self.has_table():
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 55, in has_table
todo_api    |     with self.connection.cursor() as cursor:
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
todo_api    |     return func(*args, **kwargs)
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/backends/base/base.py", line 259, in cursor
todo_api    |     return self._cursor()
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/backends/base/base.py", line 235, in _cursor
todo_api    |     self.ensure_connection()
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
todo_api    |     return func(*args, **kwargs)
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
todo_api    |     self.connect()
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
todo_api    |     raise dj_exc_value.with_traceback(traceback) from exc_value
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
todo_api    |     self.connect()
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
todo_api    |     return func(*args, **kwargs)
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect
todo_api    |     self.connection = self.get_new_connection(conn_params)
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
todo_api    |     return func(*args, **kwargs)
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection
todo_api    |     connection = Database.connect(**conn_params)
todo_api    |   File "/opt/conda/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
todo_api    |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
todo_api    | django.db.utils.OperationalError: could not connect to server: Connection refused
todo_api    |     Is the server running on host "0.0.0.0" and accepting
todo_api    |     TCP/IP connections on port 5423?
todo_api    | 


となっております。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

ホストのIPを0.0.0.0としていますが、それが違います。
https://docs.docker.jp/compose/networking.html
ネットワークについては上記をご確認ください。

0.0.0.0の代わりに、dbとすれば良いのでは無いでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/02/03 18:45

    ご指摘いただき、ありがとうございます。現在、```0.0.0.0```を```db```に変更しておりますが、```Is the server running on host "db" (172.18.0.2) and accepting```のようなエラーが出ております。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る