mysql - Dockerfile django 和 mysql

标签 mysql django docker

我正在尝试为我的 django 项目创建一个 docker 环境

我的dockerfile:

 FROM python:3
 ENV PYTHONUNBUFFERED=1
 RUN apt-get install default-libmysqlclient-dev
 RUN mkdir /config  
 ADD /config/requirements.txt /config/  
 RUN pip install -r /config/requirements.txt
 RUN mkdir /src
 WORKDIR /src

我的docker-compose:

 version: '3'

services:
   db:
     image: mysql
     environment:
       MYSQL_ROOT_PASSWORD: root
       MYSQL_USER: root
       MYSQL_PASSWORD: root
       MYSQL_DATABASE: ProjetDjango
     container_name: mysql01
     restart: always
   nginx:
     image: nginx:1.13-alpine
     container_name: nginx01
     ports:
       - "8000:8000"
     volumes:
       - ./project:/src
       - ./config/nginx:/etc/nginx/conf.d
     depends_on:
       - web
   web:
     build: .
     container_name: django01
     command: bash -c "python3 manage.py makemigrations && python3 manage.py migrate && python3 manage.py collectstatic --noinput && gunicorn hello_django.wsgi -b 0.0.0.0:8000"
     depends_on:
       - db
     volumes:
       - ./project:/src
     expose:
       - "8000"
     restart: always

我的设置.py:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'ProjetDjango',
    'USER': 'root',
    'PASSWORD': 'root',
    'HOST': '127.0.0.1', 
    'PORT': '3306',
 }
}

我在运行时遇到此错误:docker-compose up

django.db.utils.OperationalError: (2006, '无法连接到\'127.0.0.1\' 上的 MySQL 服务器' (111“连接被拒绝”)') django01 退出,代码为 1

我已经解决这个问题 2 天了,但没有找到解决它的回复!

感谢您的帮助

最佳答案

当您将数据库服务链接到 docker 中的 Web 服务时,您必须使用数据库服务名称而不是数据库服务器 IP 来连接数据库:

db:
    image: mysql
    restart: unless-stopped
    container_name: db_of_my_project

web:
    build: .
    container_name: django01
    command: ...
    links:
        - db
    volumes:
        - ./project:/src
    expose:
        - "8000"
    restart: always

以及您的数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'ProjetDjango',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'db',  #  database container name
        'PORT': '',
    }
}

关于mysql - Dockerfile django 和 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54267781/

相关文章:

docker - dockerfile,如何支持docker运行选项-d,-v和-p?

java - 将字符串 ›ÄX%ß=dÜgž=ŒT8ï8L]4C®° 插入 sql 显示错误

mysql - MySQL 中的 NOT 运算符问题

java - 如何将 JDBC 语句与 EntityManager 结合起来?

javascript - Django View 中的通用身份验证

docker - Eureka (Eureka)无法与Docker合作? Eureka 和领事有什么区别?

mysql - 求助MySQL正则表达式——抢年头

python - Errno - 13 权限被拒绝 : '/media/- Django

python - 我如何只获得模型中的时间

git - 在 docker 容器中克隆私有(private) git 存储库