我对 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
Run Code Online (Sandbox Code Playgroud)
我的 settings.py 文件包含数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
Run Code Online (Sandbox Code Playgroud)
希望得到一些指导。谢谢。
那么您正尝试从另一个容器访问一个容器中运行的数据库吗?如果是的话 - 以下内容可能会有所帮助,至少当我遇到类似问题时它对我有帮助。
除了撰写文件中的链接之外,尝试定义网络配置,创建具有某个名称的网络并在两个服务中定义它。就像这里描述的那样,链接配置上的停靠点建议这样做。
对于你的情况来说是这样的:
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:
Run Code Online (Sandbox Code Playgroud)
它帮助我解析主机名以连接到数据库。
不用重新定义网络,而是使用
docker-compose down -v
Run Code Online (Sandbox Code Playgroud)
停止所有容器并删除所有缓存数据。
然后
docker-compose up
Run Code Online (Sandbox Code Playgroud)
从头开始。
| 归档时间: |
|
| 查看次数: |
13653 次 |
| 最近记录: |