ホームページ > バックエンド開発 > Golang > Docker 化された Go Web アプリが「そのようなファイルまたはディレクトリはありません」エラーで失敗するのはなぜですか?

Docker 化された Go Web アプリが「そのようなファイルまたはディレクトリはありません」エラーで失敗するのはなぜですか?

Linda Hamilton
リリース: 2024-12-09 19:53:13
オリジナル
869 人が閲覧しました

Why Does My Dockerized Go Web App Fail with a

Go Web アプリを使用した Docker でのユーザー プロセスの実行エラー

問題

Docker 化された Go Web アプリケーションを実行すると、「」を示すエラーが発生します。そのようなファイルまたはディレクトリはありません」(standard_init_linux.go:190.

Go)コード

package main

import (
    "fmt"
    "net/http"
    "os"
)

func hostHandler(w http.ResponseWriter, r *http.Request) {
    name, err := os.Hostname()

    if err != nil {
        panic(err)
    }

    fmt.Fprintf(w, "<h1>HOSTNAME: %s</h1><br>", name)
    fmt.Fprintf(w, "<h1>ENVIRONMENT VARS: </h1><br>")
    fmt.Fprintf(w, "<ul>")

    for _, evar := range os.Environ() {
        fmt.Fprintf(w, "<li>%s</li>", evar)
    }
    fmt.Fprintf(w, "</ul>")

}

func rootHandler(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintf(w, "<h1>Awesome site in Go!</h1><br>")
    fmt.Fprintf(w, "<a href='/host/'>Host info</a><br>")

}

func main() {

    http.HandleFunc("/", rootHandler)
    http.HandleFunc("/host/", hostHandler)
    http.ListenAndServe(":8080", nil)

}
ログイン後にコピー

Docker ファイル

FROM scratch
WORKDIR /home/ubuntu/go
COPY webapp /
EXPOSE 8080
CMD ["/webapp"]
ログイン後にコピー

原因と解決策

このエラーは、コンパイルされた Go バイナリに libc への依存関係がないために発生します。libc は、によって動的に取り込まれます。ネットをインポートするときのデフォルト。これを修正するには、次のフラグを使用して Go バイナリをコンパイルします:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -tags netgo -ldflags '-w' -o mybin *.go
ログイン後にコピー

以上がDocker 化された Go Web アプリが「そのようなファイルまたはディレクトリはありません」エラーで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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