Django docker-无法翻译主机名;db";收件人地址:提供了nodename或servname,或未知
我对Django和Docker比较陌生,我正在按照教程构建一个迷你应用程序。但是,我遇到了以下错误: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.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