You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者חי פדידה

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 15:34:36