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

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

王林
リリース: 2024-02-05 23:45:12
転載
1247 人が閲覧しました

无法使用 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 サイトの他の関連記事を参照してください。

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート