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

Jam*_*mes 14 django 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
Run Code Online (Sandbox Code Playgroud)

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

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'NAME': 'postgres',
    'USER': 'postgres',
    'HOST': 'db',
    'PORT': 5432,
}
}
Run Code Online (Sandbox Code Playgroud)

我在这里这里都看过帖子,但是都没有解决这个问题。

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

Roc*_*ckk 7

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

除了撰写文件中的链接之外,尝试定义网络配置,创建具有某个名称的网络并在两个服务中定义它。就像这里描述的那样,链接配置上的停靠建议这样做。

对于你的情况来说是这样的:

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:
Run Code Online (Sandbox Code Playgroud)

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


Joh*_*son 6

不用重新定义网络,而是使用

docker-compose down -v
Run Code Online (Sandbox Code Playgroud)

停止所有容器并删除所有缓存数据。

然后

docker-compose up
Run Code Online (Sandbox Code Playgroud)

从头开始


dfr*_*kow 5

我必须使用它docker-compose up来确保我的db容器正在运行。