我目前正在做一个项目,前端是react,后端是django,数据库是postgresql,反向代理是nginx。所有内容都通过Docker-compose文件连接起来。
现在,我尝试将我的postgresql数据库链接到django。
然而,每次我尝试使用docker-compose CLI启动我的网络时,它都会失败,并在django后端容器中迁移数据,并出现以下错误:
#0 0.697 django.db.utils.OperationalError: could not translate host name "db" to address: Name or service not known
我不明白为什么我有这个错误。当我尝试检查数据库是否已启动时,它可以正常工作:
docker-compose up -d db
Creating network "docker_nginx_django_react_template_appNetwork" with driver "bridge"
Creating db ... done
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
_ postgres:latest "docker-entrypoint.s…" 5 seconds ago Up 4 seconds 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp db
下面是我的docker-compose文件:
version: '3.8'
services:
nginx:
container_name: app_server_conf
build:
context: ./
dockerfile: ./Dockerfile
ports:
- "80:80"
environment:
- PUBLIC_URL=127.0.0.1
volumes:
- staticfiles:/staticfiles
networks:
- appNetwork
depends_on:
- backend
db:
image: postgres:latest
container_name: db
restart: always
ports:
- "5432:5432"
networks:
- appNetwork
environment:
POSTGRES_HOST_AUTH_METHOD: trust
POSTGRES_USER: test
POSTGRES_PASSWORD: test
volumes:
- postgresql:/var/lib/postgresql/data
healthcheck:
test: pg_isready -U postgres
backend:
container_name: backend
ports:
- "8000:8000"
build:
context: backend
dockerfile: ./Dockerfile
command: "make run"
networks:
- appNetwork
volumes:
- staticfiles:/app/static/
depends_on:
db:
condition: service_healthy
links:
- db:db
volumes:
postgresql:
staticfiles:
networks:
appNetwork:
driver: bridge
以下是我的settings.py
部分:
DATABASES = {
'default': {
'HOST':'db',
"ENGINE": "django.db.backends.postgresql",
'NAME': 'backend_db',
'USER': 'test',
'PASSWORD': 'test',
'PORT': '5432',
}
}
不幸的是,在网上做了很多研究后,我完全迷路了。对我来说奇怪的是,我可以看到网络中的数据库,如下面的结果。但即使用docker system prune --force
进行了硬清洁,它也没有任何作用。
docker network inspect docker_nginx_django_react_template_appNetwork
[
{
"Name": "docker_nginx_django_react_template_appNetwork",
...,
"Containers": {
"cb7fdbfc4efe91254e95c02ca680315d488b0c6426ea90b2f682b74bf18eef62": {
"Name": "db",
"EndpointID": "endpointid",
"MacAddress": "mac_address",
"IPv4Address": "ip_address/20",
"IPv6Address": ""
}
},
...
}
]
2条答案
按热度按时间jei2mxaa1#
另一个尝试帮助:
另一个我会尝试的选项是将
container_name
设置为backend_db
。我不知道container_name
如何干扰环境变量POSTGRES_DB
。8ehkhllq2#
在你的settings.py的django代码中,你必须细化
HOST
和NAME
。我不是这方面的Maven,但我也有过类似的经历。也许这个能帮到你阅读
HOST
和NAME
。抱歉的模糊答案,但我不能提供即插即用的答案。希望资源和问题最可能存在的地方的提示无论如何都有帮助。