我已经停靠了使用mysql数据库的django rest项目。
dockfile文件
FROM python:3.6
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY . /code/
RUN pip install -r requirements.txt
要求.txt
django公司
琼戈
django rest框架
轮
枕头
mysql客户端
django cors收割台
docker-compose.yml公司
version: '3'
volumes:
portainer:
services:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: docker
MYSQL_DATABASE: docker
MYSQL_USER: docker
MYSQL_PASSWORD: docker
ports:
- "3306:3306"
web:
build: .
command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000 "
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db
portainer:
image: portainer/portainer
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer:/data
设置.py
'ENGINE': 'django.db.backends.mysql', #django.db.backends.mysql
'NAME': 'docker', #local: libraries #server:
'USER': 'docker', #root #root
'PASSWORD': 'docker', #local: root #server:
'HOST': 'db', #local: localhost #server:
'PORT': '3306',
我的命令'docker compose up-d--build'成功,但是restapp容器没有启动,所以在检查日志时显示了这个错误 django.db.utils.OperationalError: (2003, 'Can\'t connect to MySQL server on \'db\' (111 "Connection refused")')
.
1条答案
按热度按时间s5a0g9ez1#
如果您的应用程序容器(
web
这里)在数据库完全初始化之前启动。你必须等到
db
服务启动(更准确地说,直到mysql
正在接受连接)(python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000
).为此,你可以使用
wait-for-it.sh
脚本(检查https://docs.docker.com/compose/startup-order/)在运行python命令之前。或者,您可以在服务器上使用重新启动策略web
服务(https://docs.docker.com/compose/compose-file/#restart_policy)自动重新启动服务(直到数据库启动)。