Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django docker-无法翻译主机名;db";收件人地址:提供了nodename或servname,或未知_Django_Docker - Fatal编程技术网

Django docker-无法翻译主机名;db";收件人地址:提供了nodename或servname,或未知

Django docker-无法翻译主机名;db";收件人地址:提供了nodename或servname,或未知,django,docker,Django,Docker,我对Django和Docker比较陌生,我正在按照教程构建一个迷你应用程序。但是,我遇到了以下错误: django.db.utils.OperationalError:无法将主机名“db”转换为地址:提供了nodename或servname,或未知 我的docker compose文件如下所示: version: '3' services: db: image: 'postgres' ports: - '5432' core: build:

我对Django和Docker比较陌生,我正在按照教程构建一个迷你应用程序。但是,我遇到了以下错误:

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

我的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
My settings.py文件包含以下数据库:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'NAME': 'postgres',
    'USER': 'postgres',
    'HOST': 'db',
    'PORT': 5432,
}
}
我看过这篇文章,但是两人都没有解决这个问题


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

那么您正试图从另一个容器访问在一个容器中运行的db?如果是的话,下面的内容可能会有所帮助,至少在我遇到类似问题时它对我有所帮助

除了撰写文件中的链接之外,尝试定义网络配置,创建具有某个名称的网络,并在两个服务中定义它。如前所述,正如config上的docks所建议的那样

对于您的案例,类似这样的内容:

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:

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

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

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

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

我已经找了几天这个问题的解决方案。以下是我所做的:

1-我将postgresql.conf.sample文件从我的postgres容器复制到我的项目文件夹中 您必须进入
cd-usr/share/postgresql
使用
docker exec-it yourcainer
bash

2-我将其名称更改为
postgresql.conf

    listen_addresses = '*'
    port = 5432             
    max_connections = 100           
    superuser_reserved_connections = 3
    unix_socket_directories = '/tmp'
3-我在
postgresql.conf

    listen_addresses = '*'
    port = 5432             
    max_connections = 100           
    superuser_reserved_connections = 3
    unix_socket_directories = '/tmp'
4-我将其添加到我的Dockerfile中

COPY postgresql.conf      /tmp/postgresql.conf
5-settings.py

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

6-我做了一次docker compose up-build

在我的具体案例中,我的postgres没有任何版本,因此postgres图像会更新,db(postgres)容器不会启动

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

docker-compose down -v
停止所有容器并删除所有缓存数据

然后


从零开始重新启动。

以下配置适用于我

然后运行以下命令:

docker-compose up -d --build   

你能让postgres容器继续运行并且只重新启动django容器,并告诉我你是否仍然收到相同的错误吗?谢谢你的评论Mostafa。抱歉,我对Docker还是个新手,所以可能需要一个人帮忙。我阻止了docker。我怎样才能让Postgres容器运行?谢谢。
docker compose restart core
这将在没有数据库的情况下重新启动应用程序,因此请确保数据库正在运行,然后执行命令谢谢。不幸的是,这个问题仍然存在。让我们来看看。
docker-compose up -d --build   
docker-compose logs