繁体   English   中英

Docker + Django + MySQL-非本地分区表列表的结尾

[英]Docker + Django + MySQL - End of list of non-natively partitioned tables

我正在尝试将Docker与Django和MySQL数据库一起使用,但是不幸的是,在docker-compose up期间,它停在End of list of non-natively partitioned tables并且我的服务器未启动。 当我在没有Docker的情况下使用我的应用程序时,它可以工作。 有什么建议吗?

docker-compose.yml

web:
  build: .
  command: python manage.py runserver 0.0.0.0:8000
  volumes:
    - .:/code
  ports:
    - "8000:8000"
db:
  image: mysql
  environment:
    - MYSQL_ALLOW_EMPTY_PASSWORD=yes
    - MYSQL_USER=root
    - MYSQL_DATABASE=pri

Dockerfile

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

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'pri',
        'USER': 'root',
        'HOST': 'db',
    }
}

在我看来,我的问题可能与目录的结构有关。 看起来它是这样的:

`DockerContainer`:
- docker-compose.yml
- Dockerfile
- requirements.txt
- ProjectDirectory

ProjectDirectory我有virtualenv和Project:

- bin
- include
- lib
- pip-selfcheck.json
- Project

Project我有git存储库,后端和前端:

- backendFolder
- frontendFolder

backendFolder

-backendProject

-backendProject

- my project with `manage.py` etc.

我认为您的撰写文件应如下所示:

version: '2'
services:
  db:
    image: mysql
    environment:
        MYSQL_ROOT_PASSWORD: Somepassword
        MYSQL_DATABASE: pri
        MYSQL_USER: root
        MYSQL_PASSWORD: strongpassword
    ports:
        - "3306:3306"
  web:
     build: .
     command: python manage.py runserver 0.0.0.0:8000
     volumes:
        - .:/code
     ports:
        - "8000:8000"
     depends_on:
        - db
     links:
        - db

和这样的设置

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'pri',
        'USER': 'root',
        'PASSWORD': 'strongpassword',
        'HOST': 'db',
    }
}

“列表结尾...”是来自MySQL的信息性消息-它列出了使用不赞成使用的“分区”引擎(即使没有)的表,并以此消息结尾。 MySQL可能需要很长时间才能启动 ,但是如果您看到“列表结束”消息,则说明它已经完成。

[Note] Beginning of list of non-natively partitioned tables
[Note] End of list of non-natively partitioned tables

这不会引起任何问题。

仅供参考,您可以通过以下方法检查MySQL服务器是否已启动并正在运行:

  1. docker-compose up -d 使用-d意味着您的容器将与终端分离 ,并在后台运行。
  2. 使用docker-compose ps检查所有服务是否正常运行。 如果它们中的任何一个都说类似Exit (1)则该特定服务未运行。
  3. 检查MySQL服务器。 运行docker-compose exec mysql mysql -uroot -pstrongpassword -e 'SELECT version();' pri docker-compose exec mysql mysql -uroot -pstrongpassword -e 'SELECT version();' pri

现在,真正失败的是您的Django应用程序。 根据对邻近答案的评论( dockerpri_web_1 exited with code 2 ),您的runserver进程快要死了。 但是,我们不知道为什么会这样做-您的消息中没有足够的信息。 我不认为它与MySQL有关,尽管数据库关闭,Django也应该启动。 由于无法连接,它将仅响应500个错误。

我的建议:

  1. 按照建议,升级到Compose版本2(另一个答案中有一个示例-很好)。 如果您不打算从主机访问MySQL,则可以考虑从mysql服务中删除port: "3306:3306" 这样,如果在3306上已经有其他监听(XAMPP或其他功能),它将不会发生冲突。

  2. 停止一切。 docker-compose down 通过将端口33068000自身占用,检查是否没有容器会干扰(使用docker ps检查)。

  3. 在后台运行MySQL: docker-compose up -d mysql 等待几秒钟,并通过docker-compose ps检查它是否仍然存在(对于“ dockerpri_mysql_1”,它应该显示“ Up”)。

  4. 现在,在Django容器中启动一个shell: docker-compose run --rm --service-ports web /bin/bash 在此处运行python manage.py checkpython manage.py runserver 0.0.0.0:8000 现在,希望您只收到相关的错误消息,以便能够解决问题。 (如果runserver会默默退出,这是一个不好的预兆-希望你的情况会更简单)

  5. 使用exitCtrl + D exit -容器将自动为您清理( --rm标志负责此操作)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM