Bagaimana untuk Membina Binari Statik dalam Go for Docker Images dari Scratch?

Mary-Kate Olsen
Lepaskan: 2024-10-31 17:17:30
asal
757 orang telah melayarinya

How to Build Static Binaries in Go for Docker Images from Scratch?

Bendera untuk Mencipta Perduaan Statik dalam Go

Apabila membina imej docker dari awal, binari statik diperlukan untuk mengelakkan ralat semasa pelaksanaan. Walau bagaimanapun, arahan RUN go build -o /go/bin/myapp mungkin menghasilkan perduaan yang gagal dengan ralat "tiada fail atau direktori sedemikian".

Untuk mengatasinya, bendera berikut diperlukan:

RUN CGO_ENABLED=0 go build -o /go/bin/myapp -a -ldflags '-extldflags "-static"' .
Salin selepas log masuk

Penjelasan:

  • CGO_ENABLED=0: Melumpuhkan CGO (Panggil Pergi dari C), iaitu ciri yang membolehkan program Go untuk panggil kod C. Ini adalah perlu kerana Linux memautkan pustaka C secara dinamik, yang boleh menyebabkan isu semasa membina binari statik.
  • -a: Memaksa membina semula semua pakej dan kebergantungan, tidak kira sama ada ia sesuai -tarikh.
  • -ldflags '-extldflags "-static"': Menentukan bendera untuk dihantar ke pemaut luaran. Dalam kes ini, -static menunjukkan bahawa pemautan statik harus digunakan, memastikan semua perpustakaan yang diperlukan dibenamkan ke dalam binari.

Adalah penting untuk menggunakan kedua-dua CGO_ENABLED=0 dan -ldflags '-extldflags " -static"' kerana:

  • CGO_ENABLED=0 melumpuhkan CGO tetapi tidak menjamin pemautan statik.
  • -ldflags '-extldflags "-static"' memaksa pemautan statik tetapi tidak melumpuhkan CGO.

Dengan menggunakan kedua-dua bendera, anda boleh memastikan bahawa binari yang terhasil adalah statik dan tidak bergantung pada mana-mana perpustakaan luaran.

Atas ialah kandungan terperinci Bagaimana untuk Membina Binari Statik dalam Go for Docker Images dari Scratch?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!