Maison > Article > développement back-end > Fichier exécutable golang d'exécution d'image Docker : exec /usr/local/go/bin/go : erreur de format d'exécution
Éditeur php Apple peut rencontrer une erreur courante lors de l'utilisation de Docker : "Fichier exécutable golang d'exécution d'image Docker : exec /usr/local/go/bin/go : erreur de format d'exécution". Cette erreur est généralement causée par le fait que le fichier exécutable Golang dans l'image n'est pas exécuté correctement. Il existe de nombreuses façons de résoudre ce problème, notamment vérifier les autorisations du fichier exécutable golang, vérifier si le fichier exécutable est accessible, vérifier si le chemin d'accès au fichier exécutable est correct, etc. En résolvant ce problème, vous pouvez garantir que les fichiers exécutables Golang sont exécutés correctement dans Docker et améliorer l'efficacité et la stabilité du développement de code.
Je sais que si l'exécutable go
doit être exécuté sur un autre ordinateur, je dois spécifier sa plateforme cible. Je construis une image docker sur une machine Apple en utilisant la puce m1 :
fichier docker
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"]
Cela semble fonctionner puisque le conteneur est vérifié après la construction de la sortie
"architecture": "amd64", "os": "linux"
Mais quand j'utilise maintenant 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
Je suis assez nouveau sur Docker, donc je pense qu'il me manque quelque chose de très évident ici.
Tout d'abord, je peux confirmer que vous avez réussi à construire le binaire amd64, ce n'est donc pas un go
problème.
Si j'exécute votre image (sur un système Linux amd64), je n'obtiens pas la même erreur que vous avez signalée. Compte tenu de cela docker-compose.yaml
:
foo: environment: - port=${port} image: docker.io/chedched/foo platform: linux/amd64 ports: - "8000:8000" restart: always
Lorsque je cours docker-compose up
, je vois :
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
Cela arrive parce que vous avez défini workdir /app
,这使得 app
成为映像中的当前工作目录,但您已将二进制文件安装为 /foo
. Il vous faut :
Changez votre cmd
pour référencer le bon emplacement :
cmd ["/foo"]
ou...
Installer les binaires dans /app
:
COPY --from=build /foo ./foo
Avec chacun de ces changements, l'image se comportera comme prévu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!