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

时间:2019-03-09 20:31:04

标签: 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

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

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

我看过帖子herehere,但都没有解决问题。

希望您能提供一些指导。谢谢。

7 个答案:

答案 0 :(得分:2)

我一直在寻找有关此问题的解决方案的几天。这是我所做的:

1-我将postgresql.conf.sample文件从我的postgres容器复制到了我的项目文件夹 您必须进入fetchInfo = () => { fetch('url') .then(res => { if (!res.ok) throw res; return res.json(); }) .then(resData => { this.setState({ courses: resData.courses, totalCourses: resData.totalCourses, pageLoading: false }); }) .catch(err){} }); } componentDidMount = () => { this.fetchInfo() } onDisableCourse = id => { this.fetchInfo() }; cd usr/share/postgresql重击

2-我将其名称更改为docker exec -it yourcontainer

3-我在postgresql.conf

中修改了这些变量
postgresql.conf

4-我将其添加到了Dockerfile

    listen_addresses = '*'
    port = 5432             
    max_connections = 100           
    superuser_reserved_connections = 3
    unix_socket_directories = '/tmp'

5-settings.py

COPY postgresql.conf      /tmp/postgresql.conf

6-我又做了DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'test', 'USER': 'testing', 'PASSWORD': 'tests', 'HOST': 'localhost', 'PORT': 5432, } }

答案 1 :(得分:1)

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

在撰写文件中,除了链接之外,

尝试定义网络配置,创建一个具有一定名称的网络,并在两个服务中对其进行定义。如here所述,links配置中的停靠点建议这样做。

这种情况适合您的情况:

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:

这有助于我解析主机名以连接到数据库。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我最近遇到了这个问题,我通过在我的docker-compose.yml文件中向数据库中添加PostgreSQL环境变量来解决了这个问题

version: '3'
 services:
  db:
     image: 'postgres'
     ports:
       - '5432'
     environment:
            - POSTGRES_DB=booksdb
            - POSTGRES_USER=postgres
            - POSTGRES_PASSWORD=postgres
  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

答案 4 :(得分:1)

在我的特定情况下,我有没有任何版本的postgres,因此postgres图像得到更新,并且db(postgres)容器不会启动

答案 5 :(得分:1)

代替重新定义网络,使用

docker-compose down -v

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

然后

docker-compose up

从头开始重新启动

答案 6 :(得分:0)

以下配置适用于documentation官方网站

version: "3.8"

services:
  db:
    image: postgres
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres

  web:
    build: .
    command: python /code/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

然后运行这些命令:

docker-compose up -d --build   
docker-compose logs