在过去的3天里一直坚持下去。我正在docker中建立映像 复制命令由于找不到正确的目录而失败。
FROM python:3.6.7-alpine
WORKDIR /usr/src/app
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip3 install -r requirements.txt
COPY . /usr/src/app
CMD python3 manage.py run -h 0.0.0.0
由该docker-dev文件运行:
version: '3.7'
services:
users:
build:
context: ./services/users
dockerfile: Dockerfile-dev
volumes:
- './services/users:/usr/src/app'
ports:
- 5001:5000
environment:
- FLASK_APP=project/__init__.py
- FLASK_ENV=development
并收到此错误:
Building users
Step 1/6 : FROM python:3.6.7-alpine
---> cb04a359db13
Step 2/6 : WORKDIR /usr/src/app
---> Using cache
---> 06bb39a49444
Step 3/6 : COPY ./requirements.txt /usr/src/app/requirements.txt
ERROR: Service 'users' failed to build: COPY failed: stat /var/snap/docker/common/var-lib-docker/tmp/docker-builder353668631/requirements.txt: no such file or directory
我什至不知道从哪里开始调试它。当我尝试访问目录时,它给了我权限错误。所以我试图用sudo运行命令,但没有帮助。有什么想法吗?
答案 0 :(得分:0)
来不及回复,但是第二个COPY命令COPY . /usr/src/app
替换了RUN pip3 install -r requirements.txt
生成的/ usr / src / app内容。
尝试
FROM python:3.6.7-alpine
WORKDIR /usr/src/app
# install in temp directory
RUN mkdir /dependencies
COPY ./requirements.txt /dependencies/requirements.txt
RUN cd /dependencies && pip3 install -r requirements.txt
COPY . /usr/src/app
# copy generated dependencies
RUN cp -r /dependencies/* /usr/src/app/
CMD python3 manage.py run -h 0.0.0.0
答案 1 :(得分:0)
我在用铍构建图像时遇到了类似的问题,并且解决了将此问题删除到.dockerignore
的问题。$ sudo docker build -t apache .
Sending build context to Docker daemon
10.55MB Step 1/4 : FROM centos ---> 9f38484d220f Step 2/4 :
RUN yum install httpd -y
---> Using cache ---> ccdafc4ae476 Step 3/4 :
**COPY ./**beryllium** /var/www/html COPY failed: stat /var/snap/docker/common/var-lib-docker/tmp/docker-builder04301**
$nano .dockerignore
startbootstrap-freelancer-master
run.sh
pro
fruit
beryllium
Bell.zip
从该文件中删除铍
$ sudo docker build -t apache .
Sending build context to Docker daemon 12.92MB
Step 1/4 : FROM centos
---> 9f38484d220f
Step 2/4 : RUN yum install httpd -y
---> Using cache
---> ccdafc4ae476
Step 3/4 : COPY ./beryllium /var/www/HTML
---> 40ebc02992a9
Step 4/4 : CMD apachectl -DFOREGROUND
---> Running in dab0a406c89e
Removing intermediate container dab0a406c89e
---> 1bea741cfb65
Successfully built 1bea741cfb65
Successfully tagged apache:latest
答案 2 :(得分:0)
与larsks suggests in his comment一样,您需要在services/users
目录中的文件。要了解原因,了解“上下文”很有用。
Docker不在客户端上构建,它看不到当前目录或文件系统上的其他文件。而是将build命令的最后一个参数作为构建上下文传递。使用docker-compose,此上下文默认为当前目录,您通常会在.
命令中将其视为docker build
,但可以像在./services/users
中所做的那样覆盖它作为您的上下文。运行构建时,第一步是将构建上下文从Docker客户端发送到服务器。即使客户端和服务器位于同一主机上(常见的默认设置,尤其是对于桌面环境),也会发生相同的过程。 .dockerignore
中列出的文件以及构建上下文的父目录中的文件不会发送到Docker服务器。
运行COPY
或ADD
命令时,第一个参数(或具有多个参数时,除最后一个参数外的所有参数)都引用构建上下文中的文件,而最后一个参数是目标文件图片中的文件或目录。
因此,当您组合以下撰写文件条目时:
build:
context: ./services/users
dockerfile: Dockerfile-dev
使用此COPY命令:
COPY ./requirements.txt /usr/src/app/requirements.txt
COPY将尝试从requirements.txt
生成的构建上下文中复制./services/users
文件,这意味着./services/users/requirements.txt
必须存在,并且不被.dockerignore
文件排除在./services/users
中。