簡體   English   中英

通過 PyCharm 在 Docker 中運行 Django 測試時,無法將主機名“db”轉換為地址

[英]could not translate host name "db" to address when running Django test in Docker through PyCharm

我有一個帶有 PostgreSQL 后端的簡單 Django 項目:

version: '3'
services:
  db:
    image: postgres:12
    ports:
      - '5432:5432'
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      POSTGRES_USER: pycharm
      POSTGRES_PASSWORD: pw123
      POSTGRES_DB: pycharm

  app:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - '8000:8000'
    volumes:
      - .:/app
    depends_on:
      - db

volumes:
  postgres_data:

使用 settings.py 中的以下數據庫settings.py

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": "pycharm",
        "USER": "pycharm",
        "PASSWORD": "pw123",
        "HOST": "db",
    }
}

還有一個簡單的測試:

from django.test import TestCase

class MyTestCase(TestCase):

    def test_example(self):
        assert 1 == 1

當我使用 docker-compose 運行項目時,一切正常:

docker-compose up

我可以執行到運行 django 應用程序的容器並成功執行測試:

docker-compose run app bash
$ python manage.py test demo.tests.MyTestCase
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK
Destroying test database for alias 'default'...

我想在 PyCharm 中運行測試,而不必每次都執行到容器中。 我已經使用 Docker 設置了遠程解釋器。 但是,當我在 PyCharm 中運行測試時,出現以下錯誤:

django.db.utils.OperationalError:無法將主機名“db”轉換為地址:名稱或服務未知

當我在 PyCharm 中運行測試時,應用程序容器似乎找不到數據庫容器。 這帶來兩個問題:

  1. 有沒有辦法解決這個問題,以便應用程序容器可以找到數據庫容器? 我知道localhost 上的 docker 網絡很棘手

  2. 無論如何設置測試,以便他們不需要連接到數據庫容器? 我覺得Djangopsycopg2應該能夠為測試啟動一個模擬 PostgreSQL 服務。

我過去解決這個問題的一種方法是將sqlite3 用於我的測試數據庫 但是,我正在使用與 sqlite 不兼容的字段(例如ArrayField ),因此這不是一個選項。

在你的 yml 文件中嘗試改變

services:
  db:
    image: postgres:11

在你的 settings.py 中:

 DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.postgresql_psycopg2",
            "NAME": "pycharm",
            "USER": "pycharm",
            "PASSWORD": "pw123",
            "HOST": "db",
            "PORT":5432,
        }
    }

每次我創建一個新的 pycharm/docker 項目時,這都會引起我的注意。

Pycharm 不知道 db 網絡,您需要更改 pycharm 運行配置以添加 db_default(或任何網絡名稱)作為 pycharm 運行配置上的 network_mode。

運行/調試配置

網絡模式值來自您從docker inspect db獲得的網絡

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM