standard_init_linux.go: 207: пользовательский процесс exec вызвал «нет такого файла или каталога» при попытке статически связать библиотеки - PullRequest
0 голосов
/ 20 мая 2019

Я не могу выполнить dockerize и использовать утилиту, написанную на c в go.

Я запустил эту программу локально без docker, и она работает

Я пытался использовать gccgo, так что иди сборка -компилятор gccgo -gccgoflags -static-libgo, но я получаю ту же ошибку

Преамбула, которая вызывает функции C, выглядит так:

/*
#cgo amd64 x86 LDFLAGS: -L. -lsomelib -lsomeotherlib
#include <stdio.h>
#include <stdlib.h>
#include "someheader.h"
*/

Мой файл Docker выглядит так:

FROM golang:1.12 AS build

WORKDIR /go/src/app
COPY . .

ENV GOOS=linux
ENV GOARCH=amd64
ENV CGO_LDFLAGS_ALLOW='-linkmode external -extldflags -static-libgcc'

COPY packageFolder $GOPATH/src/packageFolder
COPY mainPackage $GOPATH/src/mainPackage

RUN cd packageFolder
RUN go get -d -v ./...
RUN CGO_ENABLED=1 go build --ldflags '-linkmode external -extldflags -static-libgcc' -o $GOPATH/pkg/linux_amd64/packageFolder.a -x
RUN cd ../packageFolder
RUN go get -d -v ./...
RUN CGO_ENABLED=1 go build --ldflags '-linkmode external -extldflags -static-libgcc' -o $GOPATH/pkg/linux_amd64/mainPackage.a -x
RUN cd ..
RUN go get -d -v ./...
RUN go build -a -x

FROM ourPackager:latest AS packager
WORKDIR /
COPY ./resources ./resources/
RUN appman-packager create-package "package.tar.gz" ./resources

FROM scratch AS runtime
COPY --from=build /go/src/app/app /
COPY --from=packager "/package.tar.gz" ./resources/
EXPOSE 8080/tcp
ENTRYPOINT ["/app"]

Я продолжаю сталкиваться с standard_init_linux.go: 207: пользовательский процесс exec не вызывает такой файл или каталог, когда я запускаю докер

Чего мне не хватает?

1 Ответ

1 голос
/ 22 мая 2019

Мне удалось исправить это по предложению Марка.Использование образа Golang для среды выполнения выявило фактическую проблему неупакованного файла общего объекта.Поэтому я копирую его в / usr / lib / x86_64-linux-gnu во время выполнения.Я закончил с использованием Ubuntu: 18.04 вместо образа Golang во время выполнения

FROM golang:1.12 AS build

WORKDIR /go/src/app
COPY . .

ENV GOOS=linux
ENV GOARCH=amd64
ENV CGO_ENABLED=1
COPY acrcloud $GOPATH/src/packageFolder
COPY musicrec $GOPATH/src/mainPackage

RUN cd packageFolder
RUN go get -d -v ./...
RUN go build -o $GOPATH/pkg/linux_amd64/packageFolder -x
RUN cd ../mainPackage
RUN go get -d -v ./...
RUN go build -o $GOPATH/pkg/linux_amd64/mainPackage -x
RUN cd ..
RUN go get -d -v ./...
RUN go build -a -x

FROM ourPackager:latest AS packager
WORKDIR /
COPY ./resources ./resources/
RUN appman-packager create-package "package.tar.gz" ./resources

FROM ubuntu:18.04 AS runtime
COPY --from=build /go/src/app/app /
COPY --from=build /go/src/app/myExternalTool.so /usr/lib/x86_64-linux-gnu
COPY --from=packager "/package.tar.gz" ./resources/
EXPOSE 8080/tcp
ENTRYPOINT ["/app"]
...