首页 > 解决方案 > 在 dockerized 项目上运行 Django 迁移

问题描述

我有一个项目Django在. 源代码附在我本地机器上的目录中。这是撰写配置文件:Dockerdocker-compose

version: '3'
services:
  db:
    image: 'postgres'
    ports:
      - '5432:5432'
  core:
    build:
      context: .
      dockerfile: Dockerfile
    command: python3 manage.py runserver 0.0.0.0:8000
    ports:
      - '8001:8000'
    volumes:
      - .:/code
    depends_on:
      - db

尽管应用程序正常启动,但我无法运行迁移,因为每次我都会manage.py makemigrations ...收到:

django.db.utils.OperationalError: could not translate host name "db" to address: nodename nor servname provided, or not known

显然我可以bashcore容器内打开并makemigrations从那里运行,但是迁移文件是在容器内创建的,这非常不舒服。

在我的项目设置中,数据库配置为:

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

由于可以访问 docker postgres 图像,因此localhost:5432我尝试将设置中的数据库主机更改为:

'HOST': '0.0.0.0'

但是当我用docker-compose up我收到的启动容器时:

...
django.db.utils.OperationalError: could not connect to server: 
Connection refused
Is the server running on host "0.0.0.0" and accepting
TCP/IP connections on port 5432?
...

我应该如何配置数据库settings.py以便Django可以访问它来创建迁移?

标签: djangopostgresqldockerdocker-compose

解决方案


您的 docker-compose 配置不正确。您忘记链接服务

version: '3'
services:
  db:
    image: 'postgres'
    ports:
      - '5432:5432'
  core:
    build:
      context: .
      dockerfile: Dockerfile
    command: python3 manage.py runserver 0.0.0.0:8000
    ports:
      - '8001:8000'
    volumes:
      - .:/code
    depends_on:
      - db
    links: # <- here
      - db

推荐阅读