我正在建立一个码头形象,需要包括一些内容,从特定的网址。因此,我提出了一个卷曲请求,并获得内容作为一个拉链。我也能将拉链解压缩到文件夹中。但是,在下一行中,如果我试图复制文件夹,就会得到这样的文件或文件夹不存在的错误。有人能帮我吗?下面是停靠文件。如果我在解压缩后执行ls -a,我可以看到2项下拉和amui,这是正确的。但是下一行如果我试图复制它就失败了。
# escape=`
# Setup arguments
ARG BuildConfiguration=Release
ARG ASSEMBLY_VERSION=0.0
ARG FILE_VERSION=0.0.0.0
ARG NUGET_CONFIG=NuGet.config
ARG SYSTEM_ACCESSTOKEN
# base image stage
FROM abc.io/aspnet-runtime:3.1.6 AS base
WORKDIR /app
EXPOSE 80
FROM abc.io/dotnet-build:3.1.6 AS build
ARG BuildConfiguration
ARG ASSEMBLY_VERSION
ARG FILE_VERSION
ARG NUGET_CONFIG
ARG SYSTEM_ACCESSTOKEN
ENV BuildConfiguration=$BuildConfiguration `
ASSEMBLY_VERSION=$ASSEMBLY_VERSION `
FILE_VERSION=$FILE_VERSION `
NUGET_CONFIG=$NUGET_CONFIG `
SYSTEM_ACCESSTOKEN=$SYSTEM_ACCESSTOKEN
WORKDIR /build
RUN Write-Host "BuildConfiguration: ${env:BuildConfiguration}"; `
Write-Host "ASSEMBLY_VERSION: ${env:ASSEMBLY_VERSION}"; `
Write-Host "FILE_VERSION: ${env:FILE_VERSION}"; `
Write-Host "NUGET_CONFIG: ${env:NUGET_CONFIG}"; `
Write-Host "SYSTEM_ACCESSTOKEN: ${env:SYSTEM_ACCESSTOKEN}";
RUN apt-get install -y apt-transport-https
RUN apt-get update
RUN apt-get install -y aspnetcore-runtime-3.1
RUN apt-get install -y curl
RUN apt-get install -y unzip
FROM build as drop
RUN curl -o drop -u sdf@dise.com:ydfesdfasdfdf56pxvwnd5z6445l7kgezpb2lky6ja2g6xvtina4a --request GET 'https://abe.com/ded/c8002d3e-f4a9-4aea-9ab8-230027996c53/_apis/build/builds/1133376/artifacts?artifactName=drop&api-version=6.0&%24format=zip' -L
RUN unzip drop -d amui
COPY amui .下面是docker命令的输出。为了简洁起见,不显示整个输出。
100 18.8M 0 18.8M 0 0 757k 0 --:--:-- 0:00:25 --:--:-- 450k
100 20.4M 0 20.4M 0 0 784k 0 --:--:-- 0:00:26 --:--:-- 573k
100 20.7M 0 20.7M 0 0 774k 0 --:--:-- 0:00:27 --:--:-- 543k
100 21.1M 0 21.1M 0 0 759k 0 --:--:-- 0:00:28 --:--:-- 582k
100 21.7M 0 21.7M 0 0 764k 0 --:--:-- 0:00:29 --:--:-- 795k
Removing intermediate container 5cf617b55a61
---> 79d3a513aaf3
Step 25/45 : RUN unzip drop -d amui
---> Running in d1c070949cf9
Archive: drop
creating: amui/drop/
creating: amui/drop/amui/
inflating: amui/drop/SQL/Sql.Template.json
Removing intermediate container d1c070949cf9
---> 73959bf35eca
Step 26/45 : COPY amui src/I.C.AM.C.P
Service 'p.am.ui' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder955237576/amui: no such file or directory发布于 2021-09-29 14:12:50
确保文件或文件夹位于您预期的位置。来自FROM abc.io/aspnet-runtime:3.1.6 AS base的FROM abc.io/aspnet-runtime:3.1.6 AS base设置了all上下文的工作目录,直到遇到另一个WORKDIR为止,因此,即使是那些“继承”上一个(FROM previous as new)或RUN上下文的WORKDIR也是如此。一旦这种情况消失,剩下的部分就是由FROM创建的上下文及其顺序。
Sending build context to Docker daemon 3.072kB
Step 1/7 : FROM alpine as base
---> 6dbb9cc54074
Step 2/7 : WORKDIR /hello
---> Running in 5b7f95f0d20b
Removing intermediate container 5b7f95f0d20b
---> 0f139883db01
Step 3/7 : RUN pwd
---> Running in 1a6d896f621b
/hello
Removing intermediate container 1a6d896f621b
---> a09834ecd175
Step 4/7 : RUN cd /
---> Running in 3e6f35bf70e1
Removing intermediate container 3e6f35bf70e1
---> 9636932e3f16
Step 5/7 : RUN pwd
---> Running in fa5dc0c60493
/hello
Removing intermediate container fa5dc0c60493
---> 1d2630c5a098
Step 6/7 : FROM base as test
---> 1d2630c5a098
Step 7/7 : RUN pwd
---> Running in fabd6c1e82f8
/hello
Removing intermediate container fabd6c1e82f8
---> b39b67911581
Successfully built b39b67911581COPY用于外部文件,即在主机系统上的图像文件系统/上下文之外,并且相对于您为docker build [...] <context>指定的上下文路径(或者相对于上一阶段docker build [...] <context>的WORKDIR,如果不确定,则使用绝对路径)。
所以情况是这样的:
FROM base as drop创建的最后一个上下文(包括curl+unzip垃圾)作为最终图像-> use RUN cp->创建的垃圾,使用新的FROM (可能是FROM base)来创建一个新的上下文,并最终确定上一个上下文,然后从COPY --from=drop amui <dest>的上一个映像中复制
可选地,COPY接受一个标志-- FROM =,该标志可用于将源位置设置为以前的构建阶段(用FROM创建)。它将用于代替用户发送的构建上下文。如果找不到具有指定名称的构建阶段,则尝试使用同名的映像。(来源)FROM指令的顺序matters。如果要从base复制到drop映像,则需要在FROM ... AS base之前构建FROM ... AS drop。您基本上是使用一个映像来构建,然后您希望继续在其基础上构建:
FROM [...] AS base # creates context for "base"
...
<base image created>
FROM base AS drop # creates context for "drop"
<download>
COPY ...
<drop image created>但是您还没有为最终的映像启动一个新的上下文(因为您希望从以前的上下文中复制--而且您仍然在构建它,或者只是错误地使用COPY for RUN cp),因此即使您正确地使用了COPY --from=...,您仍然在复制到错误的上下文。
试试这个:
FROM [...] AS base # creates context for "base"
...
<base image created>
FROM base AS drop # creates context for "drop"
<download>
<drop image created>
FROM base # creates a new, unnamed context
COPY --from=drop ...
<final image created>最后一个FROM上下文用于使用以下工具构建的最终映像:
docker build --tag <name> [other options] <context path>示例:
Sending build context to Docker daemon 2.048kB
Step 1/7 : FROM alpine as base
---> 6dbb9cc54074
Step 2/7 : RUN mkdir content;echo "hello" > content/file.txt
---> Running in 1f1a82201436
Removing intermediate container 1f1a82201436
---> 35b7a54e6952
Step 3/7 : FROM base as drop
---> 35b7a54e6952
Step 4/7 : RUN echo "world" > content/file.txt
---> Running in e5b214cad371
Removing intermediate container e5b214cad371
---> 51a3a090f43a
Step 5/7 : FROM base
---> 35b7a54e6952
Step 6/7 : COPY --from=drop content content
---> e4280a26c86f
Step 7/7 : RUN cat content/file.txt
---> Running in d71a121a7ff9
world
Removing intermediate container d71a121a7ff9
---> 760e756c4c11
Successfully built 760e756c4c11发布于 2021-09-29 14:27:05
若要更改图像中的文件,应使用:
RUN cp filename path您可以使用RUN echo "your path:" pwd和RUN echo "folders:" ls进行“调试”,并反复导航和检查路径是否正确。只需记住从您的Dockerfile中删除这些行并重新构建。
您还可以在生成之后使用以下方法使其成为:
docker images获取您的图像名称和标签
docker run --privileged -i -t image_name:image_tag bash通过图像导航,复制,修改,克隆等.
退出容器并运行:
docker ps -a要从您刚刚离开的容器中获取图像id,请执行以下操作。然后跑:
docker commit [image id] image_name_you_choose:tag以保存图像更改。
https://stackoverflow.com/questions/69378036
复制相似问题