为了账号安全,请及时绑定邮箱和手机立即绑定

Docker Go 映像:启动容器进程导致:exec:“app”:$PATH 中找不到可执行文件:

Docker Go 映像:启动容器进程导致:exec:“app”:$PATH 中找不到可执行文件:

Go
MMMHUHU 2022-10-17 15:52:36
我一直在阅读很多关于不同语言的类似问题,但没有一个是 Go。我刚刚使用我在官方 Docker 中心页面上遵循的说明创建了一个 Dockerfile :FROM golang:1.17.3WORKDIR /go/src/appCOPY . .RUN go get -d -v ./...RUN go install -v ./...CMD ["app"]这是我的文件夹结构:users-service |-> .gitignore |-> Dockerfile |-> go.mod |-> main.go |-> README.md如果有人需要查看一些代码,这就是我的main.go样子:package mainimport "fmt"func main() {    fmt.Println("Hello, World!")}我跑了docker build -t users-service .:$ docker build -t users-service .[+] Building 5.5s (11/11) FINISHED => [internal] load build definition from Dockerfile                                                                                                               0.1s => => transferring dockerfile: 154B                                                                                                                               0.1s  => [internal] load .dockerignore                                                                                                                                  0.0s  => => transferring context: 2B                                                                                                                                    0.0s  => [internal] load metadata for docker.io/library/golang:1.17.3                                                                                                   3.3s => [auth] library/golang:pull token for registry-1.docker.io                                                                                                      0.0sUse 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them然后我跑了docker run users-service,但我得到了那个错误:$ docker 运行用户服务docker:来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:380:启动容器进程导致:exec:“app”:$PATH 中找不到可执行文件:未知。我记得我GOPATH在 Windows 上的 Visual Studio Code 中遇到了一些环境变量问题,也许是相关的……有什么建议吗?
查看完整描述

2 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

官方 Docker 文档有关于构建 Go 镜像的有用说明:https ://docs.docker.com/language/golang/build-images/


总之,您需要构建您的 Go 二进制文件,并且需要适当地配置 CMD,例如:

FROM golang:1.17.3


WORKDIR /app


COPY main.go .

COPY go.mod ./


RUN go build -o /my-go-app


CMD ["/my-go-app"]

构建容器:


$ docker build -t users-service .

运行 docker 容器:


$ docker run --rm -it users-service

Hello, World!


查看完整回答
反对 回复 2022-10-17
?
DIEA

TA贡献1820条经验 获得超2个赞

您的“app”可执行二进制文件应该可以在您$PATH的全局调用中使用,而无需任何路径前缀。否则,您必须提供可执行文件的完整路径,例如CMD ["/my/app"]

另外,我建议使用ENTRYPOINT指令。ENTRYPOINT指示可执行文件的直接路径,而CMD指示提供给ENTRYPOINT.

使用组合指令使您的图像层最小化,与使用多个sRUN相比,您的整体图像大小变得更小一些。RUN


查看完整回答
反对 回复 2022-10-17
  • 2 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信