尝试创建服务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"]
我尝试了很多事情,但是没有用。
有什么想法吗? 谢谢
答案 0 :(得分:2)
您的二进制文件很可能动态链接到高山映像中不可用的一个或多个库。例如,如果您的二进制文件链接到glibc
(通常是在Ubuntu上编译的),则它在alpine(使用musl
而不是glibc
)中不起作用,但可以工作与ubuntu:latest
。
请参见How do I build a static Go binary for the Docker Alpine image?
简而言之,在将二进制文件复制到高山容器中之前先用CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build <args>
编译二进制文件通常可以解决问题。