一尘不染

Django docker-无法将主机名“ db”转换为地址:提供的节点名或服务名,或者未知

docker

我是Django和Docker的新手,并且正在关注构建迷你应用程序的教程。但是,我陷入了以下错误:

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

我的docker-compose文件如下所示:

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

我的settings.py文件包含数据库:

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

希望能得到一些指导。谢谢。


阅读 493

收藏
2020-06-17

共1个答案

一尘不染

因此,您正在尝试从另一个容器访问在一个容器中运行的数据库?如果是,以下内容可能会有所帮助,至少当我遇到类似问题时,它对我有所帮助。

除撰写文件中的 链接 外,尝试定义 网络
配置,创建具有某些名称的网络,然后在两个服务中均对其进行定义。像描述在这里,作为在码头上 的链接 配置建议这样做。 __ __

对于您的情况,如下所示:

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

它帮助我解析了主机名以连接到数据库。

2020-06-17