'无法连接到'db\'django restframework上的mysql服务器,docker中有mysql

czq61nw1  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(498)

我已经停靠了使用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")') .

s5a0g9ez

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)自动重新启动服务(直到数据库启动)。

相关问题