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

Docker环境下Django容器无法连接MySQL容器的问题求助

解决Django容器无法连接MySQL容器的问题

问题根源

两个独立的Docker Compose配置默认会创建各自的隔离网络,Django容器和MySQL容器不在同一网络内,因此无法通过服务名mysql解析到对应的容器。另外,Django配置中依赖的环境变量需要确保在容器内正确设置。

解决方案一:合并Docker Compose配置

将MySQL、phpMyAdmin和Django服务放到同一个docker-compose.yml文件中,所有服务会自动加入默认网络,可直接通过服务名互相访问。

修改后的完整配置:

version: '3'

services:
  mysql:
    image: mysql:8
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: test
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_DATABASE: testdb
    ports:
      - "3306:3306"
    restart: always

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    environment:
      PMA_HOST: mysql
      MYSQL_ROOT_PASSWORD: test
    ports:
      - "8080:80"
    depends_on:
      - mysql
    restart: always

  django_farhyn:
    build: .
    container_name: django_farhyn
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"
    environment:
      MYSQL_DATABASE: testdb
      MYSQL_USER: test
      MYSQL_PASSWORD: test
    depends_on:
      - mysql
    restart: always

解决方案二:使用自定义共享网络

如果不想合并配置,可创建一个自定义网络,让两个Compose配置都接入这个网络。

  1. 创建自定义网络:
docker network create django-mysql-network
  1. 修改MySQL的docker-compose.yml,添加网络配置:
version: '3'

services:
  mysql:
    image: mysql:8
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: test
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_DATABASE: testdb
    ports:
      - "3306:3306"
    restart: always
    networks:
      - django-mysql-network

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    environment:
      PMA_HOST: mysql
      MYSQL_ROOT_PASSWORD: test
    ports:
      - "8080:80"
    depends_on:
      - mysql
    restart: always
    networks:
      - django-mysql-network

networks:
  django-mysql-network:
    external: true
  1. 修改Django的docker-compose.yml,添加网络配置和环境变量:
version: '3'

services:
  django_farhyn:
    build: .
    container_name: django_farhyn
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"
    environment:
      MYSQL_DATABASE: testdb
      MYSQL_USER: test
      MYSQL_PASSWORD: test
    networks:
      - django-mysql-network
    restart: always

networks:
  django-mysql-network:
    external: true

额外注意事项

  • 确保Django容器内安装了MySQL客户端依赖(比如mysqlclient),否则即使网络连通也会连接失败。
  • depends_on仅保证服务启动顺序,不保证MySQL完全就绪,可添加健康检查或等待脚本,确保MySQL启动完成后再启动Django。

内容的提问来源于stack exchange,提问作者boyenec

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:20:04