Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/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
Docker在django应用程序postgresql连接上编写_Django_Postgresql_Docker_Docker Compose - Fatal编程技术网

Docker在django应用程序postgresql连接上编写

Docker在django应用程序postgresql连接上编写,django,postgresql,docker,docker-compose,Django,Postgresql,Docker,Docker Compose,我尝试将我的django应用程序对接, 这里是我的docker-compose.yml: version: '3' networks: mynetwork: driver: bridge services: postgres: restart: always image: postgres:11 ports: - "5432:5432" volumes: - ./data:/var/lib/postgresql/dat

我尝试将我的django应用程序对接, 这里是我的docker-compose.yml:

version: '3'

networks:
  mynetwork:
    driver: bridge

services:

  postgres:
    restart: always
    image: postgres:11
    ports:
      - "5432:5432"
    volumes:
      - ./data:/var/lib/postgresql/data

  web:
    build: .
    command: python /Code/core/manage.py runserver 0.0.0.0:8000
    networks:
      - mynetwork

    ports:
      - "8000:8000"

    depends_on:
      - postgres
在我的django应用程序中,在my settings.py中,我有以下db连接参数: 设置.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydbname',
        'USER': 'mydbuser',
        'PASSWORD': 'mydbpassword',
        'HOST': '127.0.0.1',
        'PORT': '5432',
        'OPTIONS': {
            'client_encoding': 'UTF8',
        },
    }
}
嗯,在我跑步的时候

docker-compose build
艾尔完成了,但当我完成时:

docker-compose up
我得到这个错误:

连接=连接(dsn,连接工厂=连接工厂,**kwasync) web_1 | psycopg2.OperationalError:无法连接到服务器:连接被拒绝 web|1|是在主机“127.0.0.1”上运行并接受 端口5432上的web_1| TCP/IP连接

如何使用docker postgres映像管理django db连接参数


非常感谢您在docker compose中,您可以利用docker compose网络。您可以根据容器名称进行服务到服务的通信

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydbname',
        'USER': 'mydbuser',
        'PASSWORD': 'mydbpassword',
        'HOST': 'postgres',
        'PORT': '5432',
        'OPTIONS': {
            'client_encoding': 'UTF8',
        },
    }
}

在连接中,当您使用
127.0.0.1
时,它指的是web应用程序的本地主机,而不是postgres,它也是@Michalk评论中的一部分。

您应该将数据库设置的
host
更改为
postgres
,因为这是
docker compose
中的服务名称。docker compose将在内部创建一个网络并将容器连接到该网络。docker compose中定义的服务名称将是映射到容器IP的DNS名称:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydbname',
        'USER': 'mydbuser',
        'PASSWORD': 'mydbpassword',
        'HOST': 'postgres',
        'PORT': '5432',
        'OPTIONS': {
            'client_encoding': 'UTF8',
        },
    }
}
还请记住,在应用程序容器尝试访问数据库之前,不会确保数据库已完全初始化。这也记录在我共享的链接中:

依赖于
不等待db和redis在启动web之前“准备就绪”——只在它们启动之前。如果需要等待服务准备就绪,请参阅以获取有关此问题的更多信息和解决策略


此网站应帮助进行演练:将
host
更改为
postgres
,而不是
localhost
可能重复的django.db.utils。操作错误:无法将主机名“postgres”转换为地址:名称未解析谢谢,如果我尝试使用postgres,我会得到:django.db.utils.OperationalError:无法将主机名“postgres”转换为地址:name不存在resolve@ManuelSanti运行
docker ps
并确认
postgres
服务是否正常运行。