我正在尝试为我的 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/