python - 无法在不同 yaml 文件中使用相同网络翻译 Docker Compose 中的主机名
问题描述
首先我创建后端网络:
docker network create backend
使用 db 创建第一个 docker-compose.yaml 文件:
version: '3.8'
services:
db:
image: postgres
restart: always
environment:
POSTGRES_PASSWORD: postgres
ports:
- "5432:5432"
networks:
- backend
networks:
backend:
external: true
使用 Django 创建第二个 docker-compose.yaml 文件:
version: '3.8'
services:
django:
build:
context: ./
dockerfile: ./dockerfiles/django
restart: always
command: python3 manage.py runserver 0.0.0.0:8000
ports:
- "80:8000"
networks:
- backend
volumes:
- .:/code
networks:
backend:
external: true
Django 中的数据库设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'db_name',
'USER': 'user_name',
'PASSWORD': 'user_pass',
'HOST': 'backend',
'PORT': '5432',
}
}
Docker 在 Django yaml 上编写:
django.db.utils.OperationalError: could not translate host name "backend" to address: Name or service not known
我阅读了文档和其他问题......我肯定做的一切都是正确的,但为什么 django 无法解析主机名?我尝试 d ocker-compose run和docker- compose up但没有任何帮助。
我也尝试在两个容器(django 和 db)中使用getent,但输出为空:
getent hosts backend
我查看了 /etc/hosts 但它没有后端
但是docker inspect backend在“容器”中向我显示这两个服务都连接到网络
"Containers": {
"25c5cc71f1c66dd3c8540783c08532f32073859b6a1afdc4fe4efd1236963080": {
"Name": "worker_django_1",
"EndpointID": "e982e75232e5d920bf3b053fce36b85589d4d7d9d8c5a8fbaea4a76dba519aa0",
"MacAddress": "02:42:ac:13:00:03",
"IPv4Address": "172.19.0.3/16",
"IPv6Address": ""
},
"6a7447068f0d5c9ba725b02e46f243aaac1ebca2068c978c7a183f965a3460fe": {
"Name": "postgres_db_1",
"EndpointID": "e3977c3f26a583a9117f7504f4a6ed0f192cdc88e872e129108a90f419b755b0",
"MacAddress": "02:42:ac:13:00:02",
"IPv4Address": "172.19.0.2/16",
"IPv6Address": ""
}
},
解决方案
尝试服务名称而不是网络名称。在这种情况下,它将是 db。
推荐阅读
- javascript - 逐行读取文本文件并执行函数?
- parsing - 在寻找 Gammar 的追随者时感到困惑
- python - 用python中的另一个字符串替换字符串中的所有标点符号
- mysql - 如何正确设计 SQL 查询以实现最优的行输出
- html - 如何在移动视图中显示导航栏?
- java - 如何实例化 Anylogic 块/对象 (INode)
- python - 什么是 pythonic 的方式来拥有没有带有 python 数据类的 setter 的属性 getter?
- python - Python将特殊字符串写入CSV
- javascript - file attachment using microsoft graph send mail not working
- arrays - 使用打字稿替换字符串中的参数并获取数组