editor php Apple mungkin menghadapi ralat biasa apabila menggunakan Docker: "Fail boleh laku golang pelaksanaan imej Docker: exec /usr/local/go/bin/go: ralat format exec". Ralat ini biasanya disebabkan oleh fail boleh laku golang dalam imej tidak dilaksanakan dengan betul. Terdapat banyak cara untuk menyelesaikan masalah ini, termasuk menyemak kebenaran fail boleh laku golang, menyemak sama ada fail boleh laku boleh diakses, menyemak sama ada laluan ke fail boleh laku adalah betul, dsb. Dengan menyelesaikan masalah ini, anda boleh memastikan bahawa fail boleh laku golang dilaksanakan dengan betul dalam Docker dan meningkatkan kecekapan dan kestabilan pembangunan kod.
Saya tahu bahawa jika go
boleh laku hendak dijalankan pada komputer lain, saya perlu menentukan platform sasarannya. Saya sedang membina imej docker pada mesin Apple menggunakan cip m1:
dockerfile
from --platform=linux/amd64 golang:alpine as build workdir / add go.mod . add go.sum . run go mod download copy . . run cgo_enabled=0 goos=linux goarch=amd64 go build -ldflags="-s -w" -o . from --platform=linux/amd64 scratch workdir /app copy --from=build /foo /foo cmd ["./foo"]
Ini nampaknya berfungsi kerana bekas diperiksa selepas membina output
"architecture": "amd64", "os": "linux"
Tapi bila dah guna sekarang docker-compose
在 linux 服务器上启动映像时,出现错误: exec /usr/local/go/bin/go: exec format error
docker-compose.yml
foo: environment: - PORT=${PORT} image: docker.io/name/foo platform: linux/amd64 ports: - "8000:8000" restart: always
Saya agak baru untuk berlabuh, jadi saya rasa saya kehilangan sesuatu yang sangat jelas di sini.
Pertama sekali, saya boleh mengesahkan bahawa anda berjaya membina binari amd64, jadi ini bukan isu go
.
Jika saya menjalankan imej anda (pada sistem linux amd64) saya tidak mendapat ralat yang sama yang anda laporkan. Memandangkan ini docker-compose.yaml
:
foo: environment: - port=${port} image: docker.io/chedched/foo platform: linux/amd64 ports: - "8000:8000" restart: always
Apabila berlari docker-compose up
, saya nampak:
error: for images_foo_1 cannot start service foo: failed to create shim task: oci runtime create failed: runc create failed: unable to start container process: exec: "./foo": stat ./foo: no such file or directory: unknown
Ini berlaku kerana anda menetapkan workdir /app
,这使得 app
成为映像中的当前工作目录,但您已将二进制文件安装为 /foo
. Anda perlukan:
Tukar cmd
anda untuk merujuk lokasi yang betul:
cmd ["/foo"]
atau...
Pasang binari dalam /app
:
COPY --from=build /foo ./foo
Dengan mana-mana perubahan ini, imej akan berkelakuan seperti yang diharapkan.
Atas ialah kandungan terperinci Fail boleh laku golang pelaksanaan imej Docker: exec /usr/local/go/bin/go: ralat format exec. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!