Django中涉及django.db.utils.OperationalError的manage.py测试错误

时间:2017-12-02 21:12:23

标签: python html django

运行python manage.py test时收到以下错误

django.db.utils.OperationalError:无法将主机名“db”转换为地址:提供的nodename或servname,或者未知

我的docker-compose.yml看起来像这样:

catch

我的dockerfile看起来像

version: '3'

services:
  db:
    image: postgres
    ports:
      - "5432:5432"
  web:
    entrypoint: /entrypoint.sh
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

请告诉我有关如何解决此问题的任何见解。

2 个答案:

答案 0 :(得分:0)

这是因为他们不在同一个网络中,

您应该创建一个网络并在其中包含db和web,

version: '3'

services:
  db:
    image: postgres
    ports:
      - "5432:5432"
    networks:
      - backend


  web:
    entrypoint: /entrypoint.sh
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
    networks:
      - backend

networks:
  backend:
    driver: bridge

答案 1 :(得分:0)

请注意不要暴露数据库的端口

version: '3'

services:
  db:
    image: postgres
  environment:
    POSTGRES_PASSWORD: <password>
    POSTGRES_USER: postgres
  networks:
    - backend

现在,在Django settings.py中,您可以使用db作为主机名,而不是localhost。

DATABASES = {'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',                      
        'USER': 'postgres',
        'PASSWORD': '<password>',
        'HOST': 'db',
        'PORT': '5432', 
    }}

您的web服务保持不变,因为该服务需要绑定到您的localhost:8000的容器的端口8000