doupian9490 2019-05-20 19:43
浏览 199

standard_init_linux.go:207:exec用户进程在尝试静态链接c库时导致“无此文件或目录”

I am unable to dockerize and use a utility written in c in go.

I have run this program locally without docker and it works

I tried using gccgo like so go build -compiler gccgo -gccgoflags -static-libgo but I get the same error

The preamble that calls the C functions looks like so:

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

My docker file looks like so:

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"]

I keep running into standard_init_linux.go:207: exec user process caused "no such file or directory" when I do a docker run

What am I missing?

  • 写回答

1条回答 默认 最新

  • duandingcu7010 2019-05-22 05:24
    关注

    I was able to fix it with Mark's suggestion. Using a Golang image for runtime exposed the actual problem of the shared object file not being packaged. So I copy it to /usr/lib/x86_64-linux-gnu in my runtime. I ended up using ubuntu:18.04 instead of the Golang image at runtime

    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"]
    
    评论

报告相同问题?

悬赏问题

  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗