我创建了一个django应用程序,并使用mysql作为数据库后端。一切在我的本地计算机上都运行良好,因此我尝试将这个应用程序进行docker化。而且我已经编写了下面提到的代码以对我的应用程序进行泊坞窗。
version: '3'
services:
mysql:
image: mysql:latest
command: --default-authentication-plugin=mysql_native_password
ports:
- '3306:3306'
environment:
MYSQL_DATABASE: 'cool_db'
MYSQL_ROOT_PASSWORD: 'hello@123*'
container_name: mysql01
restart: always
web:
build: .
container_name: django01
command: bash -c "python3 manage.py makemigrations && python3 manage.py migrate && python3 manage.py collectstatic --noinput && python3 manage.py runserver 0.0.0.0:8000"
volumes:
- my-vol:/src
ports:
- "8000:8000"
links:
- mysql
depends_on:
- mysql
expose:
- "8000"
restart: always
volumes:
my-vol:
FROM python:latest
ENV PYTHONUNBUFFERED 1
RUN mkdir /src
WORKDIR /src/
COPY ./requirements.txt /src/requirements.txt
RUN pip install -r /src/requirements.txt
COPY . /src/
EXPOSE 8000
autopep8==1.5.2
boto3==1.14.7
celery==3.1.24
channels==2.4.0
channels-redis==2.4.2
configparser==5.0.0
django==3.0.3
djangorestframework==3.11.0
mysqlclient==1.4.6
pre-commit==2.2.0
redis==2.10.6
requests==2.23.0
WhiteNoise==5.1.0
DATABASES = {
"default": {
"ENGINE": config.get("database", "DATABASE_ENGINE"),
"NAME": config.get("database", "DATABASE_NAME"),
"USER": config.get("database", "DATABASE_USER"),
"PASSWORD": config.get("database", "DATABASE_PASSWORD"),
"HOST": config.get("database", "DATABASE_HOST"),
"PORT": config.get("database", "DATABASE_PORT"),
}
}
[database]
DATABASE_USER: root
DATABASE_PASSWORD: hello@123
DATABASE_HOST: mysql
DATABASE_PORT: 3306
DATABASE_ENGINE: django.db.backends.mysql
DATABASE_NAME: cool_db
但是当我使用sudo docker-compose up
运行此代码时,我的django服务无法与mysql服务连接并引发此错误 django.db.utils.OperationalError:(2002,“无法连接至本地通过套接字'/var/run/mysqld/mysqld.sock'(2)的MySQL服务器”)
尽管mysql也正在我的系统上运行,但我还是使用sudo docker ps
对其进行了验证。它列出了2个容器正在运行,Mysql容器正在运行,没有任何问题,但是django容器由于提到的错误而一次又一次地以相同的错误重新启动。