Docker exec用户进程中的Golang应用导致“没有此类文件或目录”

Sre*_*ova 4 ubuntu go docker

我正在尝试创建在Go中开发的应用的docker映像。我有一个名为myapp的二进制文件,如果我执行它,然后它可以正常工作,请使用以下命令执行它:

./myapp
Run Code Online (Sandbox Code Playgroud)

然后,将那个垃圾桶放到一个单独的目录中,mydirectory并在其中放入这个dockerfile:

# iron/go is the alpine image with only ca-certificates added
FROM iron/go

WORKDIR /

# Now just add the binary
ADD myapp /

ENTRYPOINT ["./myapp"]
Run Code Online (Sandbox Code Playgroud)

然后输入以下内容来创建docker映像:

docker build -t myDockerHubUser/myapp .
Run Code Online (Sandbox Code Playgroud)

然后,当我运行图像时,我收到以下消息:

standard_init_linux.go:185: exec user process caused "no such file or directory"
Run Code Online (Sandbox Code Playgroud)

这是什么意思?我发现一些帖子与相同的消息有关,但事实是我的bnary正确执行,没有任何问题

Enr*_*ahn 9

您最有可能:

  • 将二进制文件用于错误的平台
  • 二进制文件不是静态链接的(没有所有必需的库)

您可以用来CGO_ENABLED=0静态地构建二进制文件。

  • 我在一个 `alpine:latest` 容器中运行了一个 go 二进制文件,而这个二进制文件是在一个 `golang:1.11` 容器中构建的。将构建容器的基础镜像切换到 `golang:1.11-alpine` 为我解决了这个问题。 (4认同)
  • 这最终也是我的问题(/sf/ask/4988355641/# 71262352)。我使用的是多阶段构建,但没有使用基于 Alpine 的两个阶段。一种是基于 Debian 的,另一种是基于 Alpine 的。当他们同步时,它就起作用了。 (4认同)

MB1*_*B11 -3

容器内 /myfile 没有执行权限。您必须在 dockerfile 内执行 chmod +x /myfile 。只需在 ENTRYPOINT 行之前添加以下语句即可。

运行 chmod +x /myfile