Docker-Compose中Django容器连接MariaDB容器的端口配置问题咨询
Docker-Compose中Django容器连接MariaDB容器的端口配置问题咨询
嗨,我来给你掰扯清楚这个问题哈!
你遇到的情况其实是没搞明白Docker容器间通信和宿主机端口映射的区别,我给你拆解下:
- 首先,Docker Compose会自动给所有配置的服务创建一个专属的内部网络,同一网络里的容器之间是直接通过容器内部的端口通信的,和你映射到宿主机的端口没关系。
- 你给MariaDB设置的
"3307:3306"是端口映射规则:意思是把宿主机的3307端口转发到MariaDB容器内部的3306端口,这个规则是给宿主机本身或者宿主机外部的设备访问MariaDB用的,不是给同网络里的Django容器用的。
所以当你在Django的数据库配置里填3306时,其实是直接访问MariaDB容器内部正在监听的端口,加上两个容器在同一个Compose网络里,自然能连上;但如果填3307,相当于Django容器在试图访问自己的3307端口,或者绕到宿主机的3307端口去连接,这既没必要,也不符合容器间通信的逻辑,自然就失败了。
举个实际的配置例子,你的Django数据库配置应该写成这样:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '你的数据库名称', 'USER': '数据库用户名', 'PASSWORD': '数据库密码', 'HOST': 'maria_db', # 这里填Compose里MariaDB的服务名 'PORT': '3306', # 填容器内部的端口,不是宿主机映射的3307 } }
简单总结:容器之间通信用容器内部端口,宿主机访问容器才用映射后的宿主机端口,这俩是完全独立的逻辑,别搞混就好啦!
备注:内容来源于stack exchange,提问作者חי פדידה
相关产品推荐
相关产品推荐

