ホームページ  >  記事  >  バックエンド開発  >  Docker のマルチステージ ビルドを使用して go binary を実行できない

Docker のマルチステージ ビルドを使用して go binary を実行できない

王林
王林転載
2024-02-05 23:45:121074ブラウズ

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

質問内容

次のように go アプリケーションを構築しようとしています。main.go ファイルは cmd/app/main.go にあります。

しかし、docker build --no-cache . を実行しようとすると、docker は <container_id> を実行します。 exec ./bin/app: No such file or directory

が表示されます。

go build -o ./bin/app ./cmd/app を実行してテストしたところ、 ./bin/app は正しく実行できました。

これは私の dockerfile です

リーリー

コンテナにアクセスしようとします docker run -it -t fyno/server/multi /bin/sh

リーリー ###ありがとう。

この問題を解決するにはどうすればよいですか?


正解


まず、パスにいくつかの問題があり、

No such file or directory エラーが発生します。 私は最小限の
dockerfile サンプルを作成し、app バイナリの名前を変更しました。これは、サンプルの app ディレクトリにあったため、混乱を引き起こしました。今ではもっと意味が分かると思います。

第二に、

dockerfile のパスの不正確さを修正した後、go バイナリを実行しようとすると、さらに微妙な問題が発生します: Not found because golang The Builder image is using debian glibc 2.31-13 deb11u5 2.31 およびランナー イメージは musl libc (x86_64) を使用しています バージョン 1.2.2

最も簡単な修正は、ビルド時に

cgo_enabled=0 を設定することです。 cgo でコンパイルしたい場合は、この点で互換性のあるビルダーおよびランナー イメージを見つけてください。 同様の問題に対して、
ここでいくつかの代替案と回避策が提供されています。

3 番目に、コメントで

.env ファイルについても言及されていたため、 docker run --env を使用するための単純な読み取り表示を mvp に追加しました。 .. 挿入された環境変数。 リーリー

dockerfile: リーリー

main.go: リーリー

ビルドと実行:

リーリー リーリー

以上がDocker のマルチステージ ビルドを使用して go binary を実行できないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。