我正在尝试使用docker将Django项目与MySQL连接。
在启动docker-compose时出现问题。它说下一个错误:
超级(连接,自我)。初始化(* args,** kwargs2)django.db.utils.OperationalError:(2002,“无法连接到'db'上的MySQL服务器(115)”)
我正在使用端口3307,是否应该在本地创建第一个新的数据库架构?或因为我的默认端口是3306而怎么办,但是如果我尝试使用它,它说那很忙。
我的代码在这里:
Docker文件
FROM python:3.7
ENV PYTHONUNBUFFERED 1
ENV LANG=C.UTF-8
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN apt-get update
RUN pip install -r requirements.txt
ADD . /code/
Docker组成
version: '2'
services:
app:
container_name: container_app
build:
context: .
dockerfile: Dockerfile
restart: always
command: bash -c "python3 manage.py migrate && python manage.py shell < backend/scripts/setup.py && python3 manage.py runserver 0.0.0.0:8000"
links:
- db
depends_on:
- db
ports:
- "8000:8000"
db:
container_name: container_database
image: mariadb
restart: always
environment:
MYSQL_ROOT_HOST: 'host.docker.internal'
MYSQL_DATABASE: 'container_develop'
MYSQL_USER: 'root'
MYSQL_PASSWORD: 'password'
MYSQL_ROOT_PASSWORD: 'password'
ports:
- "3307:3307"
settings.py:
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database_develop',
'USER': 'root',
'PASSWORD': 'password',
'HOST': 'db',
'PORT': 3307,
'CHARSET': 'utf8',
'COLLATION': 'utf8_bin',
'OPTIONS': {
'use_unicode' : True,
'init_command': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
},
}
}
问题是我在任何地方都没有数据库,所以我在本地使用它,是否必须将数据库上传到服务器,然后使用服务器提供给我的端口?有什么办法可以从docker本地使用它吗?还是将其安装到Docker?因此,我可以将该docker分享给朋友,他可以使用同一数据库?
@Nico回答了我从容器外部修复您的服务可访问性的问题,这意味着如果尝试从主机访问它,它应该可以工作。
但是在服务到服务的通信期间会出现错误。您不应该在服务中使用发布端口来服务通信,或者必须在服务中使用容器端口来服务通信。
将连接端口从更改3307
为3306
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database_develop',
'USER': 'root',
'PASSWORD': 'password',
'HOST': 'db',
'PORT': 3306,
'CHARSET': 'utf8',
'COLLATION': 'utf8_bin',
'OPTIONS': {
'use_unicode' : True,
'init_command': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
},
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句