首页 > 解决方案 > Docker - 没有这样的文件或目录。复制不会复制所有文件

问题描述

Dockerfile 不会完全复制本地目录中的所有文件。我不明白他为什么从后端复制文件夹,但它没有所有文件。感谢帮助..

结构体:

docker/
    django/
          /Dockerfile
          /backend/
              requirements.txt
              src/
    angular4/
          /Dockerfile
          /client
    docker-compose.yml

码头工人-compose.yml

version: '3'
services:
  db:
    image: postgres:9.6
    hostname: db
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: alinta
    ports:
      - "5432:5432"
  backend:
    build: ./django
    image: alinta
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/var/www/alinta/
    ports:
      - "8000:8000"
    depends_on:
      - db
  migration:
    image: alinta
    command: python3 manage.py migrate --noinput
    volumes:
      - .:/var/www/alinta/
    depends_on:
      - db
  frontend:
    build: ./angular4
    volumes:
      - .:/var/www/alinta
    ports:
      - "4200:4200"

Dockerfile (django):

FROM postgres:9.6
RUN apt-get update && apt-get install -q -y postgresql-9.6 postgresql-client-9.6 postgresql-contrib-9.6 postgresql-client-common postgresql-common 
#RUN echo postgres:postgres | chpasswd
#RUN pg_createcluster 9.6 main --start
#RUN /etc/init.d/postgresql start

FROM python:3.7
MAINTAINER Nikita Alekseev <nik_alekseev@outlook.com>
# Alinta
# Version: 1.0
# Install Python and Package Libraries
RUN apt-get update && apt-get upgrade -y && apt-get autoremove && apt-get autoclean
RUN apt-get install -y \
    libffi-dev \
    libssl-dev \
    libxml2-dev \
    libxslt-dev \
    libjpeg-dev \
    libfreetype6-dev \
    zlib1g-dev \
    net-tools \
    vim
RUN apt-get install -y \
    python3-pip \
    python3-dev \
    python3-virtualenv \ 
    libpq-dev \ 
    postgresql \
    postgresql-contrib \
    nginx \
    curl
RUN pip3 install virtualenv
# Project Files and Settings
ARG PROJECT=alinta
ARG PROJECT_DIR=/var/www/${PROJECT}
RUN mkdir -p $PROJECT_DIR/backend/src
RUN mkdir -p $PROJECT_DIR/backend/src/static
RUN mkdir -p $PROJECT_DIR/backend/src/media

#WORKDIR $PROJECT_DIR
COPY ./backend /var/www/alinta/
WORKDIR $PROJECT_DIR/backend
RUN virtualenv -p python3.7 --no-site-packages env
RUN /bin/bash -c "source env/bin/activate"
RUN pip3 install -r requirements.txt
WORKDIR $PROJECT_DIR/backend/src
EXPOSE 8000

docker-compose build
错误:无法打开需求文件:[Errno 2] 没有这样的文件或目录:'requirements.txt'

标签: dockerdocker-composedockerfile

解决方案


对于您的Dockerfile,您的 requirements.txt 位于后端目录中,并且不在同一级别,因此添加或复制它会使其可见:

所以添加:

ADD ./backend/requirements.txt requirements.txt

或者

COPY ./backend/requirements.txt requirements.txt

在你跑步之前

RUN pip3 install -r requirements.txt

只需将后端目录复制为:

COPY ./backend /var/www/alinta/

不会让 Docker 知道你的requrements.txt的上下文。使用ADDorCOPY将指示 Docker 如何定位文件。


推荐阅读