代码之家  ›  专栏  ›  技术社区  ›  Sudharsan Venkatraj

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

  •  0
  • Sudharsan Venkatraj  · 技术社区  · 5 年前

    我已经停靠了使用mysql数据库的现有django rest项目。

    文档文件

    FROM python:3.6
    
    ENV PYTHONUNBUFFERED 1
    RUN mkdir /code
    WORKDIR /code
    COPY . /code/
    RUN pip install -r requirements.txt
    

    需求.txt

    丹戈
    琼戈
    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 回复  |  直到 5 年前
        1
  •  0
  •   norbjd    5 年前

    如果您的应用程序容器( 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命令之前。或者,您可以在 网状物 服务( https://docs.docker.com/compose/compose-file/#restart_policy )自动重新启动服务(直到数据库启动)。