ホームページ  >  記事  >  バックエンド開発  >  Docker イメージの実行 golang 実行可能ファイル: exec /usr/local/go/bin/go: exec 形式エラー

Docker イメージの実行 golang 実行可能ファイル: exec /usr/local/go/bin/go: exec 形式エラー

PHPz
PHPz転載
2024-02-09 10:18:29602ブラウズ

Docker 镜像执行 golang 可执行文件:exec /usr/local/go/bin/go: exec 格式错误

php エディター Apple は、Docker を使用するときに、「Docker イメージが golang 実行可能ファイルを実行します: exec /usr/local/go/bin/go: exec format error」という一般的なエラーに遭遇することがあります。このエラーは通常、イメージ内の golang 実行可能ファイルが正しく実行されていないことが原因で発生します。この問題を解決するには、golang 実行可能ファイルの権限を確認する、実行可能ファイルにアクセスできるかどうかを確認する、実行可能ファイルへのパスが正しいかどうかを確認するなど、さまざまな方法があります。この問題を解決すると、golang 実行可能ファイルが Docker で正しく実行されるようになり、コード開発の効率と安定性が向上します。

質問の内容

go 実行可能ファイルを別のコンピュータで実行する場合、そのターゲット プラットフォームを指定する必要があることを理解しました。 m1 チップを使用して Apple マシン上に Docker イメージを構築しています:

ドッカーファイル

リーリー

出力をビルドした後にコンテナがチェックされるため、これは機能するようです

リーリー

しかし、docker-compose を使用して Linux サーバー上でイメージを起動すると、次のエラーが発生します: exec /usr/local/go/bin/go: exec format error

docker-compose.yml

リーリー

私は docker についてはかなり初心者なので、ここで非常に明白な何かが欠けていると思います。

回避策

まず、amd64 バイナリが正常にビルドされたことが確認できたので、これは go の問題ではありません。

イメージを (amd64 Linux システム上で) 実行すると、報告されたのと同じエラーは発生しません。この docker-compose.yaml:

を考慮すると リーリー

docker-compose up を実行すると、次のように表示されます: リーリー

これは、

workdir /app を設定しているため、app がイメージ内の現在の作業ディレクトリになりますが、バイナリは /foo## としてインストールされているために発生します。 #。必要ですか:

    正しい場所を参照するように
  • cmd

    を変更します: リーリー ###または...###

    バイナリを

    /app
  • にインストールします:
  • リーリー

    これらの変更を加えると、イメージは期待どおりに動作します。

以上がDocker イメージの実行 golang 実行可能ファイル: exec /usr/local/go/bin/go: exec 形式エラーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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