首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头图像合成拷贝命令

码头图像合成拷贝命令
EN

Stack Overflow用户
提问于 2021-09-29 14:09:25
回答 2查看 75关注 0票数 2

我正在建立一个码头形象,需要包括一些内容,从特定的网址。因此,我提出了一个卷曲请求,并获得内容作为一个拉链。我也能将拉链解压缩到文件夹中。但是,在下一行中,如果我试图复制文件夹,就会得到这样的文件或文件夹不存在的错误。有人能帮我吗?下面是停靠文件。如果我在解压缩后执行ls -a,我可以看到2项下拉和amui,这是正确的。但是下一行如果我试图复制它就失败了。

代码语言:javascript
复制
# 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命令的输出。为了简洁起见,不显示整个输出。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-29 14:12:50

确保文件或文件夹位于您预期的位置。来自FROM abc.io/aspnet-runtime:3.1.6 AS baseFROM abc.io/aspnet-runtime:3.1.6 AS base设置了all上下文的工作目录,直到遇到另一个WORKDIR为止,因此,即使是那些“继承”上一个(FROM previous as new)或RUN上下文的WORKDIR也是如此。一旦这种情况消失,剩下的部分就是由FROM创建的上下文及其顺序。

代码语言:javascript
复制
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 b39b67911581

COPY用于外部文件,即在主机系统上的图像文件系统/上下文之外,并且相对于您为docker build [...] <context>指定的上下文路径(或者相对于上一阶段docker build [...] <context>WORKDIR,如果不确定,则使用绝对路径)。

所以情况是这样的:

  • 您已经有了图像中的内容,您希望使用FROM base as drop创建的最后一个上下文(包括curl+unzip垃圾)作为最终图像-> use RUN cp
  • 您想要丢弃由curl+unzip ->创建的垃圾,使用新的FROM (可能是FROM base)来创建一个新的上下文,并最终确定上一个上下文,然后从COPY --from=drop amui <dest>的上一个映像中复制 可选地,COPY接受一个标志-- FROM =,该标志可用于将源位置设置为以前的构建阶段(用FROM创建)。它将用于代替用户发送的构建上下文。如果找不到具有指定名称的构建阶段,则尝试使用同名的映像。(来源)

FROM指令的顺序matters。如果要从base复制到drop映像,则需要在FROM ... AS base之前构建FROM ... AS drop。您基本上是使用一个映像来构建,然后您希望继续在其基础上构建:

代码语言:javascript
复制
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=...,您仍然在复制到错误的上下文。

试试这个:

代码语言:javascript
复制
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上下文用于使用以下工具构建的最终映像:

代码语言:javascript
复制
docker build --tag <name> [other options] <context path>

示例:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2021-09-29 14:27:05

若要更改图像中的文件,应使用:

代码语言:javascript
复制
RUN cp filename path

您可以使用RUN echo "your path:" pwdRUN echo "folders:" ls进行“调试”,并反复导航和检查路径是否正确。只需记住从您的Dockerfile中删除这些行并重新构建。

您还可以在生成之后使用以下方法使其成为

代码语言:javascript
复制
docker images

获取您的图像名称和标签

代码语言:javascript
复制
docker run --privileged  -i  -t  image_name:image_tag bash

通过图像导航,复制,修改,克隆等.

退出容器并运行:

代码语言:javascript
复制
docker ps -a

要从您刚刚离开的容器中获取图像id,请执行以下操作。然后跑:

代码语言:javascript
复制
docker commit [image id] image_name_you_choose:tag

以保存图像更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69378036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档