错误:服务'破折号'无法生成:复制失败:stat /var/lib/docker/tmp/docker-builder134733065/app.py:Windows 10中没有此类文件或目录

时间:2019-08-01 15:08:20

标签: python docker docker-compose

我的docker-compose.yml文件:

version: '3'
services:
  dash:
    build: ./docker
    environment:
      - COMPOSE_CONVERT_WINDOWS_PATHS=false
    ports:
      - "5000:5000"
    volumes:
      - c:/Users:/data
  • Dockerfile
FROM python:3

WORKDIR /data

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY app.py ./ 

CMD [ "python", "./app.py" ]

在Dockerfile中执行简单的COPY命令会在文件位于文件夹(与Dockerfile文件不在同一级别)中时引发此错误

我的文件夹结构:

- docker
    - Dockerfile
    - requirements.txt  
- app
    - app.py
- docker-compose.yml

2 个答案:

答案 0 :(得分:1)

您收到错误消息是因为主机上的docker build上下文目录./docker不包含app.py

确保./docker文件夹中包含app.py个文件。

如果您知道包含构建上下文和app.py文件的正确目录,则将该目录指定为构建上下文。

build: /path/to/build/context

有关构建上下文here的更多信息。

要了解docker build上下文到底是什么,请检查this

希望这会有所帮助。

更新

检查文件夹结构后,看来app/app.py./docker目录之外,这是您的构建上下文。

将应用程序目录置于docker文件夹中,并将复制命令更改为COPY app/app.py ./。还要将CMD更改为CMD [ "python", "/data/app.py" ]

答案 1 :(得分:0)

使用COPYADD,您只能使用与Dockerfile相同文件夹中或子文件夹中的源文件:

  

COPY遵守以下规则:

     
      
  • 路径必须在构建上下文中;您无法复制../something/something,因为Docker构建的第一步   是将上下文目录(和子目录)发送到docker   守护程序。
  •   

https://docs.docker.com/engine/reference/builder/#copy

在您的情况下,app.pydocker的同级文件夹中,这是您的构建上下文的基本目录。您需要将app.py移到docker文件夹中的某个位置。例如:

- docker
    - Dockerfile
    - requirements.txt  
    - app
        - app.py
- docker-compose.yml

并调整您的Dockerfile:

WORKDIR /data

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY app/app.py ./ 

CMD [ "python", "./app.py" ]