Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Membina Binari Statik dalam Go for Docker Images dari Scratch?

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-31 17:17:30758semak imbas

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"' .

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!

Kenyataan:
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