programing

도커 - 캐시 키 계산 실패: 찾을 수 없음 - Visual Studio에서 정상적으로 실행됨

easyjava 2023. 4. 19. 23:35
반응형

도커 - 캐시 키 계산 실패: 찾을 수 없음 - Visual Studio에서 정상적으로 실행됨

Visual Studio 도커 합니다(Visual Studio).docker build .을 사용법)의러음음 음 음 음 、 음 음 음 、 음 음 다 、

에러 코드

를 「피피피변변 when」로 했을 때./client.csproj계속되면 다음 메시지가 나타납니다.

변경된 복사 경로의 두 번째 오류

내가 뭘 잘못하고 있지?Docker Linux를 Windows로 변경하고 WSL을 변경하여 모든 것을 재시작했습니다.

도커 파일 클라이언트

해 주세요..dockerignore이 무시되어 .copy 할 수 .

.dockerignore퍼포먼스와 보안을 위해 도커로 전송되는 파일을 최소화하도록 설정할 수 있습니다.

* 
!dist/

번째 줄 " " "*는 모든 파일을 거부합니다. 줄 " " "!dist/를 사용할 수 .dist 표시

이로 인해 예기치 않은 동작이 발생할 수 있습니다.

FROM nginx:latest

# Fails because of * in .dockerignore
# failed to compute cache key: "/nginx.conf.spa" not found: not found
# Fix by adding `!nginx.conf.spa`  to .dockerignore
COPY nginx.conf.spa /etc/nginx/nginx.conf

RUN mkdir /app

# Works because of !dist/ in .dockerignore
COPY dist/spa /app

벨트와 멜빵.

Visual Studio에서 하는 방법은 조금 이상하다.

「」를 기동하는 에, 「」를 합니다.docker build있는 로 합니다.-f★★★★★★ 。

데모 프로젝트(다른 질문에 대한 최소 솔루션을 작성하려고)를 사용하고 있었는데, 같은 상황이 되었습니다.

데모 프로젝트 설정은 다음과 같습니다.

\WorkerService2  ("solution" folder)
   +- WorkerService2.sln
   +- WorkserService2  ("project" folder)
       +- DockerFile
       +- WorkerService2.csproj
       +- ... other program files

그래서 나는 갈 수 있을 것 같다.

cd \Workerservice2\WorkerService2
docker build .

하지만 당신의 오류 메시지를 받았습니다.

 => ERROR [build 3/7] COPY [WorkerService2/WorkerService2.csproj, WorkerService2/]                                                                                                                        0.0s
------
 > [build 3/7] COPY [WorkerService2/WorkerService2.csproj, WorkerService2/]:
------
failed to compute cache key: "/WorkerService2/WorkerService2.csproj" not found: not found

부모 디렉토리로 합니다..sln하여 -f하위 폴더에서 사용할 도커 파일을 지정하는 옵션:

cd \Workerservice2
docker build -f WorkerService2\Dockerfile --force-rm -t worker2/try7 .

docker run -it worker2/try7    

편집(Mike Loux, tblev, Goku님 감사합니다):

.docker build명령어를 입력합니다.

도커의 경우 명령어의 마지막 부분은 도커가 작업할 파일의 위치입니다.보통 이 폴더는 Docker 파일이 있는 폴더입니다만, 이것이 VS가 하는 방법의 차이입니다.이 경우 도커파일은-f의 패스, 「」가 :COPY도커 파일의 명령)은 지정된 위치에 상대적입니다..는 " 디렉토리를 의미합니다에서는 "현재 디렉토리"입니다.이 예에서는, 다음과 같습니다.\WorkerService2.

자세한 내용을 상세하게 설정하여 빌드 프로세스의 출력을 검사하여 이 단계에 도달했습니다.[툴] / [옵션] / [프로젝트와 솔루션] / [빌드 앤 실행]를 선택하면 빌드 출력의 상세도를 조정할 수 있습니다.

편집 #2 Visual Studio가 왜 이런 식으로 하는지 알 것 같아요.이를 통해 동일한 솔루션의 프로젝트 참조를 복사할 수 있습니다.

하도록 되어 있는 docker build는 ''를 사용할 수 .COPY의 솔루션에 포함된 다른 프로젝트 중 하나를 선택합니다.그러나 현재 디렉토리가 솔루션 폴더이므로 참조된 프로젝트(하위 폴더)를 도커 빌드 프로세스에 복사할 수 있습니다.

도커 지원을 추가할 때 도커 환경을 Windows로 설정했습니다.Visual Studio에서 실행해도 오류가 발생합니다.WSL(Windows Subsystem for Linux)에서 Docker가 실행 중이기 때문에 환경을 Linux로 변경했습니다.

그런 다음 터미널로 돌아가서 명령을 실행했습니다.

솔루션 폴더(루트 폴더)로 이동하여 이 문제를 해결할 수 있었습니다.

그리고 내가 그랬습니다.docker build음음음같 뭇매하다

docker build -t containername/tag -f ProjectFolder/Dockerfile .

나서 저는 '아까불까불까불까불까불까불까불까불까불까불까불까불까.docker run:

docker run containername/tag

존재하지 않는 디렉토리를 요구하면, 이 에러가 발생합니다.

저 같은 경우에는

 > [stage-1  7/14] COPY /.ssh/id_rsa.pub /.ssh/:
------
failed to compute cache key: "/.ssh/id_rsa.pub" not found: not found

는 가 the the the the the the를 붙이는 것을 ./.ssh폴더를 프로젝트 디렉토리로 이동합니다.에는 '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아'/client도커 파일

하였습니다.failed to compute cache key: not found:

docker build -t tag-name:v1.5.1 - <Dockerfile

명령어를 다음과 같이 변경하자 수정되었습니다.

docker build -t tag-name:v1.5.1 -f Dockerfile .

내 경우 디렉토리 이름에서 도커 빌드는 대소문자를 구분하기 때문에 COPY 명령어로 /bin/release/net5.0/publish를 쓰고 있었는데 같은 오류로 인해 실패하여 /bin/Release/net5.0/publish로 변경했는데 동작했습니다.

오류: 캐시 키를 계산하지 못했습니다. "src"를 찾을 수 없습니다. 찾을 수 없습니다.

제 경우 폴더/파일은 .dockerignore에서 제외되었습니다.

  1. dockerignore에서 파일을 해결한 후 이미지를 생성할 수 있습니다.

제 경우엔 이런 일이 있었습니다.

  FROM mcr.microsoft.com/dotnet/aspnet:5.0
  COPY bin/Release/net5.0/publish/ app/
  WORKDIR /app
  ENTRYPOINT ["dotnet", "MyApi.dll"]

그리고 나는 마침내 내 .dockerignore 파일에 bin 폴더가 있다는 것을 깨달았다.

저도 비슷한 문제가 있었습니다., ★★★★★★★★★★★★★.docker는, 시큐러티상의 이유로, 빌드중에 지정된 빌드 디렉토리에 파일 시스템을 루트 합니다. 「」가 됩니다.COPY ★★★★★★★★★★★★★★★★★」ADD호스트 파일 시스템의 임의 위치를 참조할 수 없습니다.아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다.결국 효과가 있었던 것은 다음과 같습니다.

COPY ./script_file.sh  /
RUN /script_file.sh

저도 같은 문제가 있었어요.내 경우 잘못된 디렉토리가 지정되었습니다.도커 파일:

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS publish
WORKDIR /app
COPY . .
RUN dotnet publish -c Release -o publish/web src/MyApp/MyApp.csproj

FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=publish publish/web .
EXPOSE 80
CMD ASPNETCORE_URLS=http://*:$PORT dotnet MyApp.dll

두 번째 을 알게 .publish/web:

COPY --from=publish publish/web .

그러나 첫 번째 단계에서 workdir / app을 지정했으므로, 내 파일은 이미지 파일 시스템의 해당 디렉토리에 위치하므로, 에서 경로를 변경합니다.publish/web로.app/publish/web문제를 해결했습니다.

마지막으로 작업한 Dockerfile은 다음과 같습니다.

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS publish
WORKDIR /app
COPY . .
RUN dotnet publish -c Release -o publish/web src/MyApp/MyApp.csproj

FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=publish app/publish/web .
EXPOSE 80
CMD ASPNETCORE_URLS=http://*:$PORT dotnet MyApp.dll

내 경우 파일 이름에 교묘하게 뒤에 공백이 있었다.

------
 > [3/3] COPY init.sh ./:
------
failed to compute cache key: "/init.sh" not found: not found

그래서 이 파일은 실제로는 "init.sh"이 아니라 "init.sh"이라고 불렸습니다.

나도 같은 문제에 직면했었다.

그 이유는 도커 파일의 DLL 파일 이름에서 대소문자가 구분되기 때문입니다.

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY MyFirstMicroService.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c release -o /app

FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "**MyFirstMicroService.dll**"]

이 .dll 이름은 .csproj 파일과 일치해야 합니다.

이 문제는 COPY 명령 입력에 대한 올바른 경로를 제공하지 않은 경우에도 발생합니다.WORKDIR 명령어는 Windows 탐색기가 아닌 컨테이너용 폴더를 여는 것이 가장 중요한 단서입니다(따라서 COPY 명령에 대해 지정해야 하는 경로에는 영향을 주지 않습니다).

내 경우 '/'와 ''를 잘못 사용하고 있었다.Open your docker file(도커 파일 열기)에 대해 설명합니다(도커 파일 또는 도커 파일이 아닌 도커 파일로만 이름이 지정되어야 합니다).From mcr.microsoft.com/dotnet/runtime:5.0 COPY bin\Release\net5와 같은 것이 있습니다.0\publish . ENTERPOINT ["dotnet", "HelloDocker.dll"]

COPY bin\Release\net5를 교환해 주세요.0\publish.COPY bin/Release/net5.0/publish로 이동합니다.

이 경우 잘못된 빌드 with PATH 구성입니다.도커build context

  1. 심플 도커 스크립트
    docker build . 
    
    어디에.컨텍스트 구축 경로입니다.
  2. 그라들+도커
    docker {
        dependsOn build
        dependsOn dockerFilesCopy
        name "${project.name}:${project.version}"
        files "build" // path to build context
    }
    
  3. Gradle+GitHub 액션
    name: Docker build and push
    
    on:
      push:
        branches: [ main ]
    
    # ...
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        # ...
    
        steps:
          - name: Checkout
            uses: actions/checkout@v2
    
         # ...
    
          - name: Build and export to Docker
            uses: docker/build-push-action@v2
            with:
              # ...
              file: src/main/docker/Dockerfile      
              context: ./build                      # path to build context
    

나의 경우 Angular 프로젝트의 경우, 나의 프로젝트는 ex: My-Folder-Project라는 폴더에 있었고, 나는 Dockerfile COPY --from=from app/dist/My-Folder-Project에 넣었지만, 물론 올바른 것은 패키지에 "이름"을 넣는 것입니다.COPY --from=dist/name-in-module과 같은 json.json을 클릭합니다.

이 경우 docker-compose.yml 구성 내의 Docker 파일의 컨텍스트와 경로를 변경했습니다.

services:
    server:
        # inheritance structru
        extends:
            file: ../../docker-compose.server.yml
        # I recommend you to play with this paths
        build:
            context: ../../
            dockerfile: ./apps/${APP_NAME}/Dockerfile
        ...

언급URL : https://stackoverflow.com/questions/66146088/docker-failed-to-compute-cache-key-not-found-runs-fine-in-visual-studio

반응형