>  기사  >  백엔드 개발  >  docker 다단계 빌드를 사용하여 go 바이너리를 실행할 수 없습니다.

docker 다단계 빌드를 사용하여 go 바이너리를 실행할 수 없습니다.

王林
王林앞으로
2024-02-05 23:45:121025검색

无法使用 docker 多阶段构建执行 go 二进制文件

질문 내용

다음과 같이 Go 애플리케이션을 구축하려고 합니다. main.go 파일은 cmd/app/main.go에 있습니다.

근데 달리려고 하면 docker build --no-cache .docker 运行 <container_id> . 덕분에 exec ./bin/app: 没有这样的文件或目录

실행을 테스트해 보았으며 go build -o ./bin/app ./cmd/app./bin/app 올바르게 작동합니다.

이것은 내 dockerfile입니다

으아악

컨테이너에 접근하려고 합니다 docker run -it -t fyno/server/multi /bin/sh

으아악

감사합니다.

이 문제를 해결하는 방법은 무엇입니까?


정답


우선 경로에 문제가 있어 No such file ordirectory 오류가 발생합니다.
최소한의 dockerfile 示例,并重命名了 app 二进制文件,这导致了混乱,因为它位于示例中的 app 디렉토리를 작성했습니다. 이제는 더 의미가 있기를 바랍니다.

두 번째로, dockerfile에서 경로 부정확성을 수정한 후 go 바이너리를 실행하려고 할 때 더 미묘한 문제에 직면하게 됩니다: 찾을 수 없음, 왜냐하면 golang 빌더 이미지가 debian glibc 2.31-13+ deb11u5 2.31을 사용하고 있기 때문입니다. 러너 이미지는 musl libc(x86_64)를 사용합니다. 버전 1.2.2.

가장 쉬운 수정 방법은 컴파일을 위해 빌드 타임에 cgo_enabled=0 。如果你确实想使用 cgo를 설정하는 것입니다. 이와 관련하여 호환되는 빌더 및 러너 이미지를 찾으세요.
비슷한 문제에 대한 몇 가지 대안과 해결 방법이 여기에 제공되어 있습니다.

셋째, 댓글에서 .env 文件,因此我还在 mvp 中添加了一个简单的读取显示,用于使用 docker run --env ...주입된 환경 변수에 대해서도 언급하셨습니다.

으아악

dockerfile:

으아악

main.go:

으아악

빌드 및 실행:

으아악 으아악

위 내용은 docker 다단계 빌드를 사용하여 go 바이너리를 실행할 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제