简体   繁体   English

Docker-compose django 和 mysql 构建错误

[英]Docker-compose build error with django and mysql

I trying to build a Django project with docker-compose and MySQL, but when i run the "docker我试图用 docker-compose 和 MySQL 构建一个 Django 项目,但是当我运行“docker

db uses an image, skipping
Building with native build. Learn about native build in Compose here:
Building web
Sending build context to Docker daemon  22.02kB
Step 6/6 : COPY . /code/
 ---> 2f42d48fb668
Successfully built 2f42d48fb668
Successfully tagged djangonew_web:latest
Traceback (most recent call last):
  File "docker-compose", line 3, in <module>
  File "compose/cli/main.py", line 80, in main
  File "compose/cli/main.py", line 192, in perform_command
  File "compose/metrics/decorator.py", line 18, in wrapper
  File "compose/cli/main.py", line 369, in build
  File "compose/project.py", line 521, in build
  File "compose/project.py", line 503, in build_service
  File "compose/service.py", line 1131, in build
  File "compose/progress_stream.py", line 22, in stream_output
  File "compose/utils.py", line 50, in split_buffer
  File "compose/utils.py", line 26, in stream_as_text
  File "compose/service.py", line 1894, in build
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmpjwyh07ql'
[16684] Failed to execute script docker-compose

My Dockerfile:我的 Dockerfile:

FROM python:3
ENV PYTHONBUFFERD=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

My docker-compose.yml file:我的 docker-compose.yml 文件:

version: "3.9"

services:
  db:
    image: mysql
    environment:
      - MYSQL_DB=mysql_test
      - MYSQL_USER=test
      - MYSQL_PASSWORD=test
      - MYSQL_ROOT_PASSWORD=test
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000" 
    depends_on:
      - db

This is such a cryptic error that i don't really now where to go.这是一个如此神秘的错误,我现在真的不知道 go 在哪里。 If someone can help me i would be very happy.如果有人可以帮助我,我会很高兴。

Thank you !谢谢 !

Avoid copying using an all encompassing pattern like .避免使用诸如. (the dot) for copying the whole working directory. (点)用于复制整个工作目录。

For one, this will be different for every environment where this runs because it includes all hidden and local files, and not only those you expect (those that are tracked by your version system, eg).一方面,这对于运行它的每个环境都会有所不同,因为它包括所有隐藏和本地文件,而不仅仅是您期望的那些(例如,由您的版本系统跟踪的那些)。

Second, there might be links that point to other directories, so you might even end up copying a lot of stuff you definitely never wanted to have in your Dockerfile.其次,可能存在指向其他目录的链接,因此您甚至可能最终复制了很多您绝对不想在 Dockerfile 中拥有的东西。 Which is most probably what happens in your case.这很可能是您的情况。

.dockerignore is a way to work against copying too much, but you should also try to copy more explicitly. .dockerignore是一种防止复制过多的方法,但您也应该尝试更明确地复制。 This will also help others to understand what you want to achieve with this specific COPY command in your Dockerfile.这也将帮助其他人了解您希望在 Dockerfile 中使用此特定COPY命令实现的目标。

tl;dr: the resulting docker image should contain only what it needs to run, and should have to change (contain anything different) only if the change is intentional. tl;dr:生成的 docker 映像应仅包含运行所需的内容,并且只有在有意更改时才应更改(包含任何不同的内容)。

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

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