首页 > 解决方案 > Dockerfile 错误:standard_init_linux.go:207:exec 用户进程导致“没有这样的文件或目录

问题描述

尝试创建 service 时出现此错误ERROR: standard_init_linux.go:207: exec user process caused "no such file or directory".。当我使用 ubuntu:latest 作为基础映像时,这不会发生。

所以我尝试使用以下方式运行服务:

docker service create --name mon --publish 9999:9999 --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock mon:1 

并且服务没有成功创建。

这是我的带有 golang:alpine 的 dockerfile:

FROM golang:alpine
COPY . /edg
RUN chmod a+x /edg/edgmn
EXPOSE 9999
CMD ["/edg/edgmn", "--rules.reactive", "--swarm.environment", "--alert.address=X:9091"]

我已经尝试了很多东西,但没有任何效果。

有任何想法吗?谢谢

标签: dockerdockerfile

解决方案


您的二进制文件可能动态链接到一个或多个在 alpine 映像中不可用的库。例如,如果您的二进制文件链接到glibc(如果您在 Ubuntu 上编译它是典型的),它将无法在 alpine 中工作(它使用musl而不是glibc),但可以与ubuntu:latest.

请参阅如何为 Docker Alpine 映像构建静态 Go 二进制文件?

简而言之,在将二进制文件CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build <args>复制到 alpine 容器之前编译二进制文件通常可以解决问题。


推荐阅读