来自守护程序的错误响应:oci运行时错误:container_linux.go

问题描述 投票:0回答:2

我有这么漂亮的Dockerfile:

FROM alpine

ADD ./service /

RUN chmod +x /service

EXPOSE 8000

ENTRYPOINT ["./service"]

使用这个Dockerfile我成功创建了图像,但在尝试创建容器时出错。

standard_init_linux.go:178: exec user process caused "exec format error"

当二进制文件或Docker容器的OS / ARCH出错时,可能会发生此错误。

service是Golang应用程序的二进制文件。在我的案例中,Golang应用程序使用CGO包。我在我的本地机器Windows 10中编译它。这是我的指示:

  • 安装tdm-gcc。基于GNU工具链的32位和64位Windows编译器套件。
  • POWERSHELL执行命令:
set GOOS=linux
set GOARCH=amd64
go build -v -o questionnaire -ldflags="-extld=$CC"

go env命令接下来回复我:

set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\NNogerbek\AppData\Local\go-build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\Users\NNogerbek\go
set GOPROXY=
set GORACE=
set GOROOT=C:\Go
set GOTMPDIR=
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\NNOGER~1\AppData\Local\Temp\go-build371579938=/tmp/go-build -gno-record-gcc-switches

我犯错的地方以及如何解决这个问题?


我也尝试使用这样的Dockerfile在docker中编译二进制文件:

FROM golang:1.11

WORKDIR /go/src/application
ADD . .


RUN go get ./...
RUN go build -o /service .

ENV PORT=8000

CMD ["/service"]

我不知道为什么,但我有错误。不知何故,Docker无法导入项目包:

package application/database: unrecognized import path "application/database" (import path does not begin with hostname)
package application/routes: unrecognized import path "application/routes" (import path does not begin with hostname)
package application/utils: unrecognized import path "application/utils" (import path does not begin with hostname)
package application/models: unrecognized import path "application/models" (import path does not begin with hostname)
package application/controllers: unrecognized import path "application/controllers" (import path does not begin with hostname)

顺便提一下项目结构:

- application
    - database
    - routes
    - utils
    - models
    - controllers
      main.go
      Dockerfile
docker docker-container
2个回答
1
投票

什么是SRC_DIR值,而且./service具有可执行权限。尝试在主机或chmod +x ./service上运行Dockerfile


0
投票

最后我明白编译在Windows操作系统中使用linux/amd64软件包的Goland应用程序的CGO二进制文件并不是一个好主意。我试图在Docker容器中启动的二进制文件总是引发错误standard_init_linux.go:178: exec user process caused "exec format error"。错误意味着OS/Arch有问题或您使用损坏的文件。

最后我决定在Docker容器中编译二进制文件。我的Dockerfile看起来像这样:

FROM golang:1.11

WORKDIR /go/src/application

ADD . .

RUN go get [your_dependencies]

RUN go build -o service

ENV PORT=8000

CMD ["./service"]

我希望这篇文章对你有用!

© www.soinside.com 2019 - 2024. All rights reserved.