【问题标题】:Dockerfile django & mysqlDockerfile django & mysql
【发布时间】:2019-06-13 12:48:11
【问题描述】:

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

我的码头文件:

 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

我的 settings.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, 'Can\'t connect to MySQL server on \'127.0.0.1\' (111 "Connection denied")') django01 以代码 1 退出

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

感谢您的帮助

【问题讨论】:

    标签: mysql django docker


    【解决方案1】:

    当您将 db 服务链接到 docker 中的 Web 服务时,您必须使用 db 服务名称而不是数据库服务器 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': '',
        }
    }
    

    【讨论】:

    • (如果没有links: 部分,此答案同样适用。)
    猜你喜欢
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2018-05-03
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多