Linux 运行docker容器包含golang项目时出现问题

Linux 运行docker容器包含golang项目时出现问题,linux,docker,go,Linux,Docker,Go,我在尝试运行包含golang应用程序的my docker映像时遇到一些问题。 这是一个错误:在此处输入代码standard_init_linux.go:211:exec用户进程导致“exec格式错误” 这是我的环境: GOARCH="amd64" GOBIN="/home/nikolaj//home/nikolaj/go/bin" GOCACHE="/home/nikolaj/.cache/go-build" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHO

我在尝试运行包含golang应用程序的my docker映像时遇到一些问题。 这是一个错误:
在此处输入代码
standard_init_linux.go:211:exec用户进程导致“exec格式错误”

这是我的环境:

GOARCH="amd64"
GOBIN="/home/nikolaj//home/nikolaj/go/bin"
GOCACHE="/home/nikolaj/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/nikolaj/go"
GOPROXY=""
GORACE=""
GOROOT="/snap/go/4765"
GOTMPDIR=""
GOTOOLDIR="/snap/go/4765/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build908015468=/tmp/go-build -gno-record-gcc-switches"

go environment : GOARCH="amd64"
GOBIN="/home/nikolaj//home/nikolaj/go/bin"
GOCACHE="/home/nikolaj/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"

GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/nikolaj/go"
GOPROXY=""
GORACE=""
GOROOT="/snap/go/4765"
GOTMPDIR=""
GOTOOLDIR="/snap/go/4765/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build838573681=/tmp/go-build -gno-record-gcc-switches"
dockerfile:

FROM golang:1.12.0

WORKDIR /app

ENV SRC_DIR=/go/src/vk_acceptor/

ADD . $SRC_DIR

RUN cd $SRC_DIR; env; goenv; export GO111MODULE=on; go get -u; go build -o application; cp application /app/

RUN chmod +x application

ENTRYPOINT ["./application"]
格式化
RUN命令后
如下所示:
RUN cd$SRC\u DIR&&env&&goenv&&export GO111MODULE=on&&go get-u&&go build-o application&&cp application/app/

docker build的输出。
命令:

Sending build context to Docker daemon  9.067MB
Step 1/7 : FROM golang:1.12.0
 ---> cee68f119e19
Step 2/7 : WORKDIR /app
 ---> Using cache
 ---> 5bffbbf8f161
Step 3/7 : ENV SRC_DIR=/go/src/vk_acceptor/
 ---> Using cache
 ---> bf145f38f8db
Step 4/7 : ADD . $SRC_DIR
 ---> 766466f20647
Step 5/7 : RUN cd $SRC_DIR && env && goenv && export GO111MODULE=on && go get -u && go build -o application && cp application /app/
 ---> Running in 7aeb8905c137
HOSTNAME=7aeb8905c137
SRC_DIR=/go/src/vk_acceptor/
HOME=/root
OLDPWD=/app
PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
GOPATH=/go
PWD=/go/src/vk_acceptor
GOLANG_VERSION=1.12
/bin/sh: 1: goenv: not found
The command '/bin/sh -c cd $SRC_DIR && env && goenv && export GO111MODULE=on && go get -u && go build -o application && cp application /app/' returned a non-zero code: 127

如果查看输出错误,可以清楚地看到错误消息:

/bin/sh: 1: goenv: not found

我猜想您想在命令中键入
go-env

标准初始化linux.go:211:exec用户进程导致“exec格式错误”错误的发生有各种原因,而不仅仅是当您尝试启动一个架构与主机不同的映像时,正如许多论坛所说的那样。
在我的例子中,发生此错误的原因是捆绑的程序放在docker容器的错误目录中。

什么是
文件。/application
打印?您是否在amd64系统上运行此容器?是否在Docker外部生成exe?如果是这样,我建议在Docker build内部构建,以确保与已知Linux映像的库链接一致。输出:docker build-t vkspotter。正在将构建上下文发送到Docker守护程序9.067MB步骤1/7:来自golang:1.12.0-->cee68f119e19。。。(跳过一些步骤)步骤7/7:入口点[“/application”]-->在1feb2636c88f中运行删除中间容器1feb2636c88f-->8c5011c23472成功构建8c5011c23472成功标记vkspotter:latest@tkausl是的,我确实在amd64系统上运行这个应用程序,我的规格是:英特尔i5,Ubuntu 19.04。您能澄清一下我应该在哪里运行
文件/application
命令吗?您不能确定没有问题,因为您忽略了long
run
标签中各个命令的返回值。用
&
而不是
连接每个命令是的,它是正确的,但在上面的线程中,我得到了帮助。现在我有了新的问题。错误是:
standard_init_linux.go:211:exec用户进程导致“exec格式错误”
,我搜索了有关它的信息,发现的只是当您尝试运行一个与主机体系结构不同的体系结构的容器时发生的错误。