当前位置: 首页 > 面试题库 >

无法为Django和Mysql触发Docker构建

夏英发
2023-03-14
问题内容

我正在用Djnago和MySql构建应用程序。我想使用docker来部署我的应用程序。我已经准备了一个requirement.txtdocker- compose.ymlDockerfile

docker-compose.yml

version: "3"

services:
  law-application:
    restart: always
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: >
      sh -c "python manage.py runserver 0.0.0.0:8000"
    depends_on:
      - mysql_db
  mysql_db:
    image: mysql:latest
    command: mysqld --default-authentication-plugin=mysql_native_password
    volumes:
      - "./mysql:/var/lib/mysql"
    ports:
      - "3306:3306"
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=root
      - MYSQL_USER=root
      - MYSQL_PASSWORD=root

requirements.txt

django>=2.1.3,<2.2.0
djangorestframework==3.11.0
mysqlclient==1.4.6

Docker文件

FROM python:3.7-alpine
MAINTAINER Intersources Inc.

ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
RUN apt-get update
RUN apt-get install python3-dev default-libmysqlclient-dev  -y

RUN mkdir /app

WORKDIR /app
COPY ./app /app

RUN adduser -D jeet
USER jeet

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'my-app-db',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'mysql_db',
        'PORT': 3307,
    }
}

我一直在尝试运行命令docker build .从docker文件构建映像,但出现此错误。看起来MySql连接器有问题。我尝试搜索解决方案,但找不到任何解决方法。如果从中删除 mysql_db
服务,则可以构建映像docker-compose.yml

Sending build context to Docker daemon  444.7MB
Step 1/12 : FROM python:3.7-alpine
 ---> 6c7f85a86cca
Step 2/12 : MAINTAINER Intersources Inc.
 ---> Using cache
 ---> 03b6fa5764d4
Step 3/12 : ENV PYTHONUNBUFFERED 1
 ---> Using cache
 ---> 22ecd91dcb55
Step 4/12 : COPY ./requirements.txt /requirements.txt
 ---> Using cache
 ---> e58c16108f20
Step 5/12 : RUN pip install -r /requirements.txt
 ---> Running in 8f3eb8240fce
Collecting django<2.2.0,>=2.1.3
  Downloading https://files.pythonhosted.org/packages/ff/82/55a696532518aa47666b45480b579a221638ab29d60d33ce71fcbd3cef9a/Django-2.1.15-py3-none-any.whl (7.3MB)
Collecting djangorestframework==3.11.0
  Downloading https://files.pythonhosted.org/packages/be/5b/9bbde4395a1074d528d6d9e0cc161d3b99bd9d0b2b558ca919ffaa2e0068/djangorestframework-3.11.0-py3-none-any.whl (911kB)
Collecting mysqlclient==1.4.6
  Downloading https://files.pythonhosted.org/packages/d0/97/7326248ac8d5049968bf4ec708a5d3d4806e412a42e74160d7f266a3e03a/mysqlclient-1.4.6.tar.gz (85kB)
    ERROR: Command errored out with exit status 1:
     command: /usr/local/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-e9kt1otq/mysqlclient/setup.py'"'"'; __file__='"'"'/tmp/pip-install-e9kt1otq/mysqlclient/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-install-e9kt1otq/mysqlclient/pip-egg-info
         cwd: /tmp/pip-install-e9kt1otq/mysqlclient/
    Complete output (12 lines):
    /bin/sh: mysql_config: not found
    /bin/sh: mariadb_config: not found
    /bin/sh: mysql_config: not found
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-e9kt1otq/mysqlclient/setup.py", line 16, in <module>
        metadata, options = get_config()
      File "/tmp/pip-install-e9kt1otq/mysqlclient/setup_posix.py", line 61, in get_config
        libs = mysql_config("libs")
      File "/tmp/pip-install-e9kt1otq/mysqlclient/setup_posix.py", line 29, in mysql_config
        raise EnvironmentError("%s not found" % (_mysql_config_path,))
    OSError: mysql_config not found
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
The command '/bin/sh -c pip install -r /requirements.txt' returned a non-zero code: 1

问题答案:

在apt-get安装后只运行pip安装要求,因为mysqlclient需要libmysqlclient-dev:

您正在将apt软件包管理器与不兼容的alpine基本linux映像一起使用。我建议将python3.7-slim与支持apt的debian os一起使用。

FROM python:3.7-slim
MAINTAINER Intersources Inc.

ENV PYTHONUNBUFFERED 1

RUN apt-get update
RUN apt-get install python3-dev default-libmysqlclient-dev gcc  -y
COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt

RUN mkdir /app

WORKDIR /app
COPY ./app /app

RUN adduser -D jeet
USER jeet

如果您确实需要像这样高山修改Dockerfile:

FROM python:3.7-alpine
MAINTAINER Intersources Inc.

RUN apk update
RUN apk add musl-dev mariadb-dev gcc
RUN pip install mysqlclient

RUN mkdir /app

WORKDIR /app
COPY ./app /app

RUN adduser -D jeet
USER jeet


 类似资料:
  • 问题内容: 我已经将Docker配置为使用docker-compose.yml运行Postgres和Django,并且工作正常。 我遇到的麻烦是Selenium无法连接到Django liveserver。 现在(至少对我而言),django必须访问selenium才能控制浏览器,而selenium必须访问django才能访问服务器。 我已经尝试从此处使用docker- compose.yml的以

  • 我已经将Docker配置为使用docker-compose.yml运行Postgres和Django,它运行良好。 我遇到的问题是硒无法连接到Django直播服务器。 现在(至少对我来说)django必须访问selenium才能控制浏览器,而selenium必须访问django才能访问服务器。 我尝试使用docker大使模式,使用以下配置从这里docker-compose.yml:https://

  • 我有一个为自动化构建配置的docker hub存储库。请参见下图。当我按下“save and trigger build”时,我看到一个错误页面,上面只写着“Oops,there was a error!” 我试着发邮件给码头工人支持,但没有成功 知道为什么会发生这种情况以及如何解决吗?

  • 问题内容: 我正在尝试使用MySQL触发器生成错误消息。下面是我的代码: 但这总是会产生错误。我不知道错误是什么,因为它没有说任何有关错误的信息,而只是“错误”。 有什么建议吗?除此之外,有人说使用存在问题,因为它可能取决于MySQL版本。有什么建议吗? 问题答案: 该子句是信号语法的一部分-它们之间不应存在分号()。此外,它使用运算符,而不是:

  • 我尝试启动一个docker-container,但我有一个错误:

  • 当我尝试构建solr架构时,出现以下错误: 也许这些信息会很有用: MySite/settings.py文件: 博客/search_indexes.py文件: blog/templates/search/index/blog/post_text.txt文件: 我正在使用Apache Solr 4.10.4、Python 3.4.5和Django 1.11.5。当我试图导入干草堆在Python控制台