【问题标题】:Docker + Django + MySQL - End of list of non-natively partitioned tablesDocker + Django + MySQL - 非本地分区表列表的结尾
【发布时间】:2017-11-20 15:33:33
【问题描述】:

我正在尝试将 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 和项目:

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

Project我有git仓库、后端和前端:

- backendFolder
- frontendFolder

backendFolder:

-backendProject

-backendProject:

- my project with `manage.py` etc.

【问题讨论】:

  • 你的迁移在哪里?
  • 我不确定它们应该在哪里?
  • 你是如何从 djago 连接到数据库的,你的 DATABASE 设置部分有什么?
  • 我已经在帖子中添加了我的数据库设置。
  • 它不会是 127.0.0.1 而是 db,因为它位于您命名为 'db' 的另一个容器中。

标签: python mysql django database docker


【解决方案1】:

“End of list ...”是来自 MySQL 的信息性消息 - 它列出了使用已弃用的“分区”引擎的表(即使没有)并以此消息结束。它可能是take long time for MySQL to start,但如果您看到“列表结束”消息,那么它已经完成了。

[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

现在,实际上失败的是您的 Django 应用程序。根据相邻答案 (dockerpri_web_1 exited with code 2) 的 cmets,您的 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 退出 - 容器将自动为您清理(--rm 标志负责此操作)。

【讨论】:

  • 我已经更新了第一篇文章。我已经描述了我将要实现的具体目标。
【解决方案2】:

我认为你的撰写文件应该是这样的:

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',
    }
}

【讨论】:

  • docker-compose up 返回ERROR: yaml.parser.ParserError: while parsing a block mapping in "./docker-compose.yml", line 4, column 3 expected <block end>, but found '<block mapping start>' in "./docker-compose.yml", line 10, column 4
  • 可能有seom缩进错误,检查一下
  • 我在两个编辑器中都试过了,但还是一样,它在你的电脑上工作吗?端口不应该与环境处于同一级别吗?
  • 不,端口应该与环境处于同一级别
  • 所以现在我得到In file './docker-compose.yml', service must be a mapping, not a NoneType.
猜你喜欢
  • 2012-11-14
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
  • 2016-12-23
相关资源
最近更新 更多