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配置都接入这个网络。
- 创建自定义网络:
docker network create django-mysql-network
- 修改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
- 修改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
相关产品推荐
相关产品推荐

