Dockerコンテナーで実行するcmd行で実行するgolangプログラムを取得しようとしていますが、アーカイブ/ tarをインポートするとエラーが発生します。
これは機能します:
package main
import (
"fmt"
)
func main() {
fmt.Println("success!")
}
出力を生成する:
liam gotest $ docker run -it gotest 成功!
これはしません:
package main
import (
"archive/tar"
"fmt"
)
var _ = tar.TypeReg
func main() {
fmt.Println("success!")
}
出力を生成する:
liam gotest $ docker run -it gotest
standard_init_linux.go:207: exec user process caused "no such file or directory"
これは私のDockerfileです:
FROM scratch
WORKDIR /app
COPY . /app
CMD ["./test"]
私は走っています:
goバージョンgo1.11.4 linux / amd64 Dockerバージョン18.09.1、ビルド4c52b90 ubuntu 18.04LTS
私はどんな提案にも感謝します。
ヴィシュヌナラヤナンによって解決:
使った
`CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo test.go`
静的な実行可能ファイルを構築し、それが機能しました。
どうして ?
これは、デフォルトのgo build
動作によるものです。コンパイルされたバイナリは、動的リンクのため、システムパスでライブラリを探しています。
以来scratch
空で、バイナリは、システムライブラリを見つけることができないと、エラーがスローされます。
これを解決するには?
ビルドスクリプトを変更して、すべてのライブラリが組み込まれた静的コンパイル済みビルドを作成します。
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
上記のビルドの出力バイナリをdockerコンテナに使用します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加