登录
首页 >  Golang >  Go问答

使用 Docker 创建包含 Go 实用程序的基本容器的步骤

来源:stackoverflow

时间:2024-02-08 23:45:21 118浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《使用 Docker 创建包含 Go 实用程序的基本容器的步骤》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

我一直在探索 docker 功能,以便创建安装了一些 go 实用程序的简单容器。我需要创建安装了 gosecgovulncheck 实用程序的映像,以便我可以在容器中的代码上运行它们。我的小尝试产生了以下结果:

# syntax=docker/dockerfile:1
from golang:1.19-alpine

workdir /app
env go111module=on

# copying my code to check
copy go.mod ./
copy go.sum ./
run go mod download
copy *.go ./

run go build -o /docker-gs-ping

run apk add --no-cache git
run go install github.com/securego/gosec/v2/cmd/gosec@latest
run go install golang.org/x/vuln/cmd/govulncheck@latest

expose 8080

cmd [ "gosec ./..." ]

运行容器会导致错误:

docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "gosec ./...": stat gosec ./...: no such file or directory: unknown.
ERRO[0000] error waiting for container: context canceled

看起来我需要指定已安装实用程序的路径,但我无法使其工作


正确答案


这不是路径问题;而是路径问题。问题是您在 dockerfile 的 cmd 语句中使用的语法。您正在使用 cmd 语句的 json 格式; json 列表中的第一个参数是要运行的命令的名称。您已要求 docker 运行名为 gosec ./... 的命令,该命令当然不存在。

您需要将其拆分为多个列表项:

cmd [ "gosec", "./..." ]

或者,您可以使用 cmd 指令的 shell 形式:

CMD  gosec ./...

当您启动容器时,其中任何一个都会运行 gosec

今天关于《使用 Docker 创建包含 Go 实用程序的基本容器的步骤》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>