Docker 스크래치 이미지로 "해당 파일 또는 디렉터리 없음"
스크래치 이미지와 사용자 정의 바이너리를 사용하여 Docker 컨테이너를 생성하려고 할 때 , 사용자에게 "standard_init_linux.go:207: exec 사용자 프로세스로 인해 "해당 파일 또는 디렉터리가 없습니다"라는 오류가 발생할 수 있습니다." 이 오류는 컨테이너 내에서 바이너리 파일을 찾거나 실행할 수 없음을 나타냅니다.
이 문제는 Dockerfile의 "FROM 스크래치" 명령 사용으로 인해 발생합니다. 스크래치 이미지는 필수 도구만 포함된 최소한의 이미지로, 가볍고 효율적인 컨테이너를 제공합니다. 그러나 이는 바이너리 실행에 필요할 수 있는 특정 라이브러리 및 종속성이 컨테이너에 부족하다는 의미이기도 합니다.
이 문제를 해결하려면 사용자는 두 가지 접근 방식 중 하나를 선택할 수 있습니다.
CGO 비활성화: CGO를 사용하면 Go 프로그램이 C 코드와 인터페이스할 수 있지만 바이너리가 시스템 라이브러리와 동적으로 연결될 수 있습니다. CGO를 비활성화하면 사용자는 바이너리가 정적으로 연결되어 특정 라이브러리에 대한 종속성을 제거할 수 있습니다.
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ -ldflags="-w -s" -o $PROJ_BIN_PATH ./cmd/...
라이브러리 복사: CGO가 필수적인 경우 바이너리인 경우 사용자는 "COPY --from" 명령을 사용하여 필요한 라이브러리를 스크래치 이미지에 수동으로 복사할 수 있습니다. 이렇게 하면 바이너리가 런타임 시 필요한 종속성에 액세스할 수 있습니다.
COPY --from=build-image /usr/lib/libc.so.6 /usr/lib/libc.so.6
선택되는 구체적인 접근 방식은 바이너리의 요구 사항과 원하는 컨테이너 격리 수준에 따라 달라집니다. 동적 연결 또는 종속성 가용성 문제를 해결함으로써 사용자는 맞춤형 바이너리를 사용하여 스크래치 이미지를 기반으로 컨테이너를 성공적으로 생성하고 실행할 수 있습니다.
위 내용은 사용자 정의 바이너리를 실행할 때 내 Docker 스크래치 이미지가 '해당 파일 또는 디렉터리 없음'을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!