docker - 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"]
我已经尝试了很多东西,但没有任何效果。
有任何想法吗?谢谢
解决方案
您的二进制文件可能动态链接到一个或多个在 alpine 映像中不可用的库。例如,如果您的二进制文件链接到glibc
(如果您在 Ubuntu 上编译它是典型的),它将无法在 alpine 中工作(它使用musl
而不是glibc
),但可以与ubuntu:latest
.
请参阅如何为 Docker Alpine 映像构建静态 Go 二进制文件?
简而言之,在将二进制文件CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build <args>
复制到 alpine 容器之前编译二进制文件通常可以解决问题。
推荐阅读
- r - 在类似文件的列表中指定标题
- javascript - Google AutocompleteService 不返回某些城市的结果
- tensorflow - TensorFlow lite 可以使用自定义 CPU 构建吗?
- javascript - 在 Elastic Beanstalk 中运行 Docker 构建脚本之前将文件复制到构建目录中?
- angular - 使用 Angular 中的反应形式修补数组内部的数组
- sql - 聚合后的窗口函数
- python - Python、selenium 机器人下拉选择
- angularjs - 当我使用 $locationProvider.html5Mode(true); 时,$window.location.href 刷新整个页面;
- sql - 如何使用匹配值使用 CSV 文件中的数据更新 Postgres 中的列
- anaconda - Anaconda 安装错误