我是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
我的settings.py文件包含数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
希望您能提供一些指导。谢谢。
答案 0 :(得分:2)
我一直在寻找有关此问题的解决方案的几天。这是我所做的:
1-我将postgresql.conf.sample文件从我的postgres容器复制到了我的项目文件夹
您必须进入fetchInfo = () => {
fetch('url')
.then(res => {
if (!res.ok) throw res;
return res.json();
})
.then(resData => {
this.setState({
courses: resData.courses,
totalCourses: resData.totalCourses,
pageLoading: false
});
})
.catch(err){}
});
}
componentDidMount = () => {
this.fetchInfo()
}
onDisableCourse = id => {
this.fetchInfo()
};
cd usr/share/postgresql
重击
2-我将其名称更改为docker exec -it yourcontainer
3-我在postgresql.conf
postgresql.conf
4-我将其添加到了Dockerfile
listen_addresses = '*'
port = 5432
max_connections = 100
superuser_reserved_connections = 3
unix_socket_directories = '/tmp'
5-settings.py
COPY postgresql.conf /tmp/postgresql.conf
6-我又做了DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'test',
'USER': 'testing',
'PASSWORD': 'tests',
'HOST': 'localhost',
'PORT': 5432,
}
}
答案 1 :(得分:1)
因此,您尝试从另一个容器访问在一个容器中运行的数据库吗?如果可以,以下内容可能会有所帮助,至少在遇到类似问题时对我有帮助。
在撰写文件中,除了链接之外,尝试定义网络配置,创建一个具有一定名称的网络,并在两个服务中对其进行定义。如here所述,links配置中的停靠点建议这样做。
这种情况适合您的情况:
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:
这有助于我解析主机名以连接到数据库。
答案 2 :(得分:1)
我必须使用docker-compose up
来确保我的db
容器正在运行。
答案 3 :(得分:1)
我最近遇到了这个问题,我通过在我的docker-compose.yml文件中向数据库中添加PostgreSQL环境变量来解决了这个问题
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
答案 4 :(得分:1)
在我的特定情况下,我有没有任何版本的postgres,因此postgres图像得到更新,并且db(postgres)容器不会启动
答案 5 :(得分:1)
代替重新定义网络,使用
docker-compose down -v
停止所有容器并删除所有缓存的数据。
然后
docker-compose up
从头开始重新启动。
答案 6 :(得分:0)
以下配置适用于documentation官方网站
version: "3.8"
services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
command: python /code/manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
然后运行这些命令:
docker-compose up -d --build
docker-compose logs