Docker在django应用程序postgresql连接上编写
我尝试将我的django应用程序对接, 这里是我的docker-compose.yml: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
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
服务是否正常运行。