Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (seongtaejeong at gmail.com)
홈페이지
첨부 파일
 

Docker container 내에서 빌드 시 error MSB3021: Unable to copy file "..." to "...". Access to the path '...' is denied.

docker container에 윈도우 파일 시스템의 디렉터리를 볼륨으로 연결한 다음,

c:\temp> docker run -v C:\temp\TestApp\:/app --name test-instance --rm -it net_build /bin/bash -c "cd /app/TestApp && dotnet build" 

그곳에서 빌드를 했더니 권한 오류가 발생합니다. 혹시나 해서 "docker run -it ..."로 실행해 직접 그 인스턴스에 들어가 빌드를 해도 역시나 오류가 발생합니다.

# whoami
root

# dotnet build
  Determining projects to restore...
  Restored /app/TestApp/TestApp.csproj (in 705 ms).
/usr/share/dotnet/sdk/8.0.404/Microsoft.Common.CurrentVersion.targets(5034,5): error MSB3021: Unable to copy file "/app/Libs/net6.0/Debug/Microsoft.Diagnostics.Runtime.dll" to "bin/Debug/net8.0/Microsoft.Diagnostics.Runtime.dll". Access to the path '/app/TestApp/bin/Debug/net8.0/Microsoft.Diagnostics.Runtime.dll' is denied. [/app/TestApp/TestApp.csproj]

Build FAILED.

/usr/share/dotnet/sdk/8.0.404/Microsoft.Common.CurrentVersion.targets(5034,5): error MSB3021: Unable to copy file "/app/Libs/net6.0/Debug/Microsoft.Diagnostics.Runtime.dll" to "bin/Debug/net8.0/Microsoft.Diagnostics.Runtime.dll". Access to the path '/app/TestApp/bin/Debug/net8.0/Microsoft.Diagnostics.Runtime.dll' is denied. [/app/TestApp/TestApp.csproj]
    0 Warning(s)
    1 Error(s)

그러니까, 다음의 파일 복사가 안 된다는 것인데요,

"/app/Libs/net6.0/Debug/Microsoft.Diagnostics.Runtime.dll" ==> "bin/Debug/net8.0/Microsoft.Diagnostics.Runtime.dll"

복사 대상이 되는 파일의 경로가 상대 경로로 나오지만, 그다음 메시지에 나온 것처럼 절대 경로는 '/app/TestApp/bin/Debug/net8.0/Microsoft.Diagnostics.Runtime.dll'이 됩니다.

'/app/TestApp/bin/Debug/net8.0/Microsoft.Diagnostics.Runtime.dll'
             "bin/Debug/net8.0/Microsoft.Diagnostics.Runtime.dll"

그런데, 그냥 저 파일을 삭제하면 아무런 문제 없이 잘됩니다.

# rm '/app/TestApp/bin/Debug/net8.0/Microsoft.Diagnostics.Runtime.dll'
# rm '/app/TestApp/bin/Debug/net8.0/Microsoft.Diagnostics.Runtime.dll'
rm: cannot remove '/app/TestApp/bin/Debug/net8.0/Microsoft.Diagnostics.Runtime.dll': No such file or directory

가만 보니, 권한 오류는 발생하지만 대상 파일이 생성은 되면서 그 크기가 0이라는 점이 재미있습니다.

# dotnet clean

# dotnet build

# ls /app/Libs/net6.0/Debug/Microsoft.Diagnostics.Runtime.dll -l
-r-xr-xr-x 1 root root 861696 Dec 11 02:56 /app/Libs/net6.0/Debug/Microsoft.Diagnostics.Runtime.dll

# ls /app/TestApp/bin/Debug/net8.0/Microsoft.Diagnostics.Runtime.dll -l
-r-xr-xr-x 1 root root 0 Dec 12 02:24 /app/TestApp/bin/Debug/net8.0/Microsoft.Diagnostics.Runtime.dll

그러니까, 파일 생성까지는 했는데 쓰는 동안 어떤 식으로든 문제가 생겼다는 것인데요, 더욱 재미있는 건 그냥 cp 명령어를 내리면 또 잘됩니다. ^^;

# cp /app/Libs/net6.0/Debug/Microsoft.Diagnostics.Runtime.dll /app/TestApp/bin/Debug/net8.0/Microsoft.Diagnostics.Runtime.dll

이거저거 살펴본 끝에, 볼륨 매핑을 한 윈도우 측의 디렉터리 권한이 "Administrator"만 읽기/쓰기가 가능하고 "Users" 권한으로는 읽기만 가능한 걸로 나오는데요, 실제로 권한 변경을 했더니,

C:\temp\TestApp> icacls . /grant Users:F /t

이후로는 문제없이 잘 빌드가 됩니다. 신기하군요. ^^; cp는 되고 dotnet build는 안 된다는 것이.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 12/13/2024]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 121  122  123  124  125  126  [127]  128  129  130  131  132  133  134  135  ...
NoWriterDateCnt.TitleFile(s)
2879정성태3/3/201526657개발 환경 구성: 259. Visual Studio 없이 Visual C++ 컴파일하는 방법
2878정성태2/28/201527470.NET Framework: 503. == 연산자보다는 Equals 메서드의 호출이 더 권장됩니다. [3]파일 다운로드1
2877정성태2/28/201521728.NET Framework: 502. 연산자 재정의(operator overloading)와 메서드 재정의(method overriding)의 다른 점 - 가상 함수 호출 여부 [3]파일 다운로드1
2876정성태2/27/201524211VS.NET IDE: 98. IntegraStudio - Visual Studio에서 Java 프로그램 개발
2875정성태2/26/201522810디버깅 기술: 72. Visual Studio 2013에서의 sos.dll 사용 제한
2874정성태2/26/201519552디버깅 기술: 71. windbg + 닷넷 디버깅 (2) - null 체크 패턴
2873정성태2/25/201537009.NET Framework: 501. FtpWebRequest 타입을 이용해 FTP 파일 업로드 [4]파일 다운로드1
2872정성태2/25/201521165디버깅 기술: 70. windbg + 닷넷 디버깅 (1) - 배열 인덱스 사용 패턴
2871정성태2/24/201525178개발 환경 구성: 258. 윈도우 8.1에서 방화벽과 함께 FTP 서버 여는 (하지만, 권장하지 않는) 방법 [1]
2870정성태2/24/201526287개발 환경 구성: 257. 윈도우 8.1에서 방화벽과 함께 FTP 서버 여는 방법
2869정성태2/23/201520256.NET Framework: 500. struct로 정의한 값 형식(Value Type)의 경우 Equals 재정의를 권장합니다.파일 다운로드1
2868정성태2/23/201524784VS.NET IDE: 97. Visual C++ 프로젝트 디버깅 시에 Step-Into(F11) 동작이 원치 않는 함수로 진입하는 것을 막는 방법 [2]
2867정성태2/23/201518426오류 유형: 273. File History - Failed to initiate user data backup (error 80070005)
2866정성태2/23/201520284오류 유형: 272. WAT080 : Failed to locate the Windows Azure SDK. Please make sure the Windows Azure SDK v2.1 is installed.
1868정성태2/20/201517583오류 유형: 271. The type '...' cannot be used as type parameter 'TContext' in the generic type or method 'System.ServiceModel.DomainServices.EntityFramework.LinqToEntitiesDomainService<T>
1866정성태2/20/201518480오류 유형: 270. "aspnet_regiis -i" 실행 시 0x00000006 오류 해결 방법
1865정성태2/20/201519821.NET Framework: 499. 특정 닷넷 프레임워크 버전 이후부터 제공되는 타입을 사용해야 한다면?
1864정성태2/18/201524812.NET Framework: 498. C#으로 간단하게 만들어 본 ASCII Art 프로그램 [2]파일 다운로드1
1862정성태2/18/201528644.NET Framework: 497. .NET Garbage Collection에 대한 정리 [6]
1861정성태2/18/201524000.NET Framework: 496. 마우스 커서가 놓인 지점의 문자열 얻는 방법 [1]파일 다운로드1
1860정성태2/18/201523832.NET Framework: 495. CorElementType의 요소 값 설명파일 다운로드1
1859정성태2/17/201524214Windows: 106. 컴퓨터를 재부팅하면 절전(Power Saver) 전원 모드로 돌아가는 경우
1858정성태2/16/201534259Windows: 105. 자동으로 로그아웃/잠김 화면 상태로 전환된다면? [2]
1857정성태2/16/201522257.NET Framework: 494. 값(struct) 형식의 제네릭(Generic) 타입이 박싱되는 경우의 메타데이터 토큰 값파일 다운로드1
1856정성태2/15/201521246.NET Framework: 493. TypeRef 메타테이블에 등록되는 타입의 조건파일 다운로드1
1855정성태2/10/201520789개발 환경 구성: 256. WebDAV Redirector - Sysinternals 폴더 연결 시 "The network path was not found" 오류 해결 방법
... 121  122  123  124  125  126  [127]  128  129  130  131  132  133  134  135  ...