当前位置: 代码网 > it编程>前端脚本>Golang > golang使用DockerFile正确用法指南

golang使用DockerFile正确用法指南

2024年05月18日 Golang 我要评论
问题背景今天寸铁想让编写好的go程序在docker上面跑,要想实现这样的效果,就需要用到今天的主角:docker file,那怎么使用dockerfile呢?那具体怎么做呢?其实很简单,不过网上的博客

问题背景

今天寸铁想让编写好的go程序在docker上面跑,要想实现这样的效果,就需要用到今天的主角:docker file,那怎么使用dockerfile呢?

那具体怎么做呢?其实很简单,不过网上的博客的一些命令笔者实操过,发现不够完善!

小伙伴们要想实现,看笔者的正确食用指南即可,减少大量踩坑的时间。

编写dockerfile

在你要运行到容器的程序所在的文件夹创建dockerfile之后复制如下内容到创建的文件中。

from golang:latest

# 设置工作目录
workdir /app

# 复制 go 程序源代码到工作目录
copy dockeruper.go .

# 编译 go 程序
run go build -o dockeruper dockeruper.go

# 运行 go 程序
cmd ["sh", "-c", "./dockeruper"]

dockeruper 替换为具体你编写的文件名

文件夹的结构如下:

创建镜像

使用如下命令创建docker镜像

docker build -t my-golang-app .

这里创建的镜像名为my-golang-app 具体替换为你的命名

运行容器

使用如下命令运行docker镜像的容器

docker run --name mycontainer-12  my-golang-app

容器名为mycontainer-12 ,镜像名为my-golang-app
具体可以根据你的实际情况进行修改。
注意:run之后 下次的容器名不能重复!!!

运行结果如下:

这样就运行容器成功啦!

附:go 使用dockerfile构建项目 mod 报错处理

1.情景

正在使用dockerfile构建go项目镜像的时候,遭遇到了executor failed running [/bin/sh -c go mod tidy]: exit code: 2以及error [internal] load metadata for docker.io/library/golang:1.19报错,经过一番折腾,终于解决,记录一下!

2.一开始的dockerfile

from golang:alpine as builder

workdir /go/web-api

# 为我们的镜像设置必要的环境变量
env go111module=on
env cgo_enabled=0
env goproxy=https://goproxy.cn,direct
env goos=linux
env goarch=amd64

copy . .

run go mod tidy
run go build -o server .

3.解决方案

3.1第一个报错executor failed running [/bin/sh -c go mod tidy]: exit code: 2

报错内容

------
 > [builder 4/5] run go mod tidy:
#8 0.275 go: unknown subcommand "mod"
#8 0.275 run 'go help' for usage.
------

按照提示信息显示,找不到命令.怀疑是golang:alpine低于当前项目的go版本(当前项目1.19).于是尝试更换成golang:1.19-alpine3.15,这次没有mod的报错了,但是有新的报错.

3.2第二个报错error [internal] load metadata for docker.io/library/golang:1.19

------
 > [internal] load metadata for docker.io/library/golang:1.19-alpine3.15:
------
failed to solve with frontend dockerfile.v0: failed to create llb definition: unexpected status code [manifests 1.19-alpine3.15]: 400 bad request

好像是镜像问题,随即查阅一番资料,得到结论,原来是docker desktop的设置问题,需要将setting->docker enginejson配置文件中的

"features": {
    "buildkit": true
  },

修改为false即可.

4.修改后结果

修改后重新运行docker build -t xxx/xxx .命令成功生成镜像.希望能帮助到有相同问题的小伙伴^_^

总结

到此这篇关于golang使用dockerfile的文章就介绍到这了,更多相关golang使用dockerfile内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com