docker部署go gin框架 Windows环境

目录

文章目的是什么

环境介绍

Windows 环境下 docker 部署 go gin 详细步骤

运行容器时因为挂载文件可能会出现的问题

直接部署gin(跳过运行容器时因为挂载文件可能会出现的问题)


文章目的是什么

假设我们学习了 go 语言,在 Windows(本地) 上安装了 go 相关的程序,也能直接运行,使用以下命令:

go run main.go

假如代码是这样的:

package mainimport "fmt"func main() {fmt.Println("Hello World")
}

就会输出:

Hello World

但现在我们想要使用 docker 来部署,可能就有一些不同,复杂度肯定会比上面多一些。

所以本文的目的是:

使用 docker 部署 go,且可以运行 gin 框架的基础代码

环境介绍

我们开发时,基本上都是在自己电脑上,大多数应该都是 Windows,而我们项目发布上线时,一般又是使用的是 Linux,本文讲解的是 Windows 环境。

Windows:版本:Windows 11

Windows 环境下 docker 部署 go gin 详细步骤

docker安装golang 我在另一个文章中有详细的讲解,因为内容比较多,建议看一下另一篇文章

docker安装golang_docker golang-CSDN博客文章浏览阅读877次。最近玩 docker 比较多,试试安装 golang。第一步:先看一下镜像;第二步:下载镜像;第三步:进一步查看 golang 是不是我们指定安装的版本;第四步:运行容器_docker golanghttps://blog.csdn.net/longfeng995/article/details/131006514?spm=1001.2014.3001.5501

运行容器时因为挂载文件可能会出现的问题

上面这篇文章,针对 Linux 环境,是没有问题的,但是在 Windows 下,可能会有一个细节问题

docker run -itd -p 8081:8080 -v /docker/go/demo:/go --name localhost-go golang:1.18.9

-v /docker/go/demo

上面这一段,是挂载文件路径,要注意一点的是,/docker   这是根目录下 docker 目录。首先我们是 Windows 环境,是没有这个目录的,需要切换成我们自己的目录。

假设像我电脑上,我是存放到 D盘 docker 目录下 ...

那么就要修改为:/d/docker/...

但是按照上面这样运行 最终会出现错误的,我们接着细看。

我们能看到,在 终端 ,显示的目录位置是:/d/docker

并且我们输入 pwd 命令打印位置,也是如此

但如果我们拿这样的目录使用,就会出现错误。我这边示范一下:

先看我们的 docker 镜像

输入 docker 命令:

docker images

能看到 golang 这个镜像

然后我们就运行容器

docker run -itd -p 8080:8080 -v /d/docker/www/go:/go --name localhost-go fffd0d9a59da

运行之后,会打印出生成的 容器ID

我们去 Docker Desktop 客户端界面看一下

容器已经生成,并且运行着 没有问题。

而上面,我们一直在强调 挂载文件 -v /docker/go/demo

我们生成容器的命令里,使用的是 -v /d/docker/www/go:/go

就说明,我们的 /d/docker/www/go 目录,是跟容器内的 /go 目录进行了绑定

然后我们来看看我们 Windows 环境下,目录是如何的

而为了校验是否真的 挂载到了这个 "go;D" 目录,我们做一个实验

然后我们进入容器内部看看

winpty docker exec -it 627d777141e6 bash

winpty 是因为是 Windows 环境,所以需要加,如果是 Linux 则可以忽略,否则会出现错误

the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'

以上,我们进入了容器内部,默认是进入的 /go 目录,然后我们 ls 输出,发现是没有 我们 Windows 环境下的 "demo" 目录,以及 "我是一个文本..." 的文件

所以,可以证明一点,我们的挂载是失败了的。

那么会有一个问题,这挂载跑哪去了呢?

当我返回根目录下,我发现了一个奇怪的目录,如下:

这个 '\Git\go' 就显得格外耀眼了,然后我很好奇的进入该目录,发现:

文件名乱码了,我想到可能是因为中文的原因,所以我们在 Windows 下改个名试试:

所以,这挂载文件是错误了的。

我们果断删除 容器,重新处理

运行下面这段代码即可

$ docker run -itd -p 8080:8080 -v D:/docker/www/go:/go --name localhost-go fffd0d9a59da

-v /d/docker/www/go:/go 我们修改为了:-v D:/docker/www/go:/go

然后我们重新进入容器,就能看到

和我们 Windows 下绑定的环境一模一样了

并且返回根目录,也不会再看到奇怪的 'Git\go' 什么的了。

好了,以上 容器我们部署好了,现在就开始运行 go

首先,我们检查 go env 的配置,并且要修改两个:

go env -w GO111MODULE=on
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct

GO111MODULE=on  go 命令行会使用 modules

GOPROXY 是设置为阿里云的代理

设置完成后,我们就可以返回 Windows 环境,找到我们的项目 demo 目录

创建一个 main.go 文件,内容为:

package mainimport "fmt"func main() {fmt.Println("Hello World")
}

然后我们进入容器看看

文件存在,并且输出内容看一下

内容是一致的,我们就可以在容器内部,运行程序试试

go run main.go

结果也是符合我们的预期。

直接部署gin(跳过运行容器时因为挂载文件可能会出现的问题)

我们进入容器,第一步是要先初始化 mod,运行:

go mod init demo

能看到创建成功,我们可以切回 Windows 下看看

因为挂载的关系,在容器里创建了文件、目录,在 Windows 环境里,也会创建,反之也是一样的。

接着我们继续在容器内执行命令,下载并安装 gin:

go get -u github.com/gin-gonic/gin

执行以上操作时,可能会出现错误,提示:"go: zip: not a valid zip file" 之类的错误。

我这边整理是说代理的问题,我上面使用的是阿里云代理,也很奇怪,有时候可以,有时候却会出现问题。

所以我切换成 七牛云代理。

go env -w GOPROXY=https://goproxy.cn,direct

然后我们再重新 下载安装gin 就可以了。

进入 main.go 文件,粘贴以下代码

package mainimport "github.com/gin-gonic/gin"func main() {r := gin.Default()r.GET("/ping", func(c *gin.Context) {c.JSON(200, gin.H{"message": "pong",})})_ = r.Run() // listen and serve on 0.0.0.0:8080
}

然后我们进入 docker 容器,运行 go

go run main.go

可以看到,程序成功执行,端口默认的是 8080

当请求后,我们可以进入容器,查看请求记录

以上,就完成了在 Windows 环境下使用 docker 部署 go gin 并运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/279042.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniGUI学习之UniHTMLMemo1富文本编辑器

1]系统自带的富文本编辑器 2]jQueryBootstarp富文本编辑器插件summernote.js 1]系统自带的富文本编辑器 1、末尾增加<p> 2、增加字体 3、解决滚屏问题 4、输入长度限制问题 5、显示 并 编辑 HTML源代码(主要是图片处理) 1、末尾增加<p> UniHTMLMemo1.Lines…

C# WPF上位机开发(crc校验)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 为了验证数据传输的过程中有没有发生翻转&#xff0c;我们在传输报文的同时一般还会添加一个crc校验。对于modbus协议也是一样&#xff0c;它在数据…

最好的猫粮排行榜前十名有哪些品牌?质量好的主食冻干猫粮分享

为什么越来越多人推荐冻干猫粮喂养呢&#xff1f;主食冻干猫粮究竟是最适应猫饮食习惯的喂养方式还是消费陷阱&#xff1f; 作为一个6年的宠物营养师&#xff0c;我以前接触过很多不同品种的猫咪&#xff0c;一只健康又漂亮的猫咪从表面上就能看出来&#xff01;体型匀称刚好、…

springboot升级到3.2导致mybatis-plus启动报错

在springboot升级到3.2时&#xff0c;服务启动报错 java.lang.IllegalArgumentException: Invalid value type for attribute ‘factoryBeanObjectType’: java.lang.String&#xff1a; java.lang.IllegalArgumentException: Invalid value type for attribute factoryBeanOb…

基于ssm金旗帜文化培训学校网站的设计与开发论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对培训学校展示信息管理混乱&#xff0c;出错率高&#xff0c;信息安全…

数据标注公司如何确保数据安全?景联文科技多维度提供保障

数据标注公司通常拥有大量的AI数据和用户数据&#xff0c;保护数据安全是数据标注公司的重要任务。 数据标注公司确保标注数据的安全可以从制度、人员、工具等多个方面入手&#xff0c;建立完善的安全管理体系和审计机制&#xff0c;加强应急预案和备份机制的建立&#xff0c;以…

【LeetCode刷题】--157.用Read4读取N个字符

157.用Read4读取N个字符 /*** The read4 API is defined in the parent class Reader4.* int read4(char[] buf4);*/public class Solution extends Reader4 {/*** param buf Destination buffer* param n Number of characters to read* return The number of actual…

风速预测(四)基于Pytorch的EMD-Transformer模型

目录 前言 1 风速数据EMD分解与可视化 1.1 导入数据 1.2 EMD分解 2 数据集制作与预处理 2.1 先划分数据集&#xff0c;按照8&#xff1a;2划分训练集和测试集 2.2 设置滑动窗口大小为7&#xff0c;制作数据集 3 基于Pytorch的EMD-Transformer模型预测 3.1 数据加载&am…

现代雷达车载应用——第2章 汽车雷达系统原理 2.6节 雷达设计考虑

经典著作&#xff0c;值得一读&#xff0c;英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.6 雷达设计考虑 上述部分给出了汽车雷达基本原理的简要概述。在雷达系统的设计中&#xff0c;有几个方面是必不可少的&#xff0c;它们决定了雷达系…

redis:四、双写一致性的原理和解决方案(延时双删、分布式锁、异步通知MQ/canal)、面试回答模板

双写一致性 场景导入 如果现在有个数据要更新&#xff0c;是先删除缓存&#xff0c;还是先操作数据库呢&#xff1f;当多个线程同时进行访问数据的操作&#xff0c;又是什么情况呢&#xff1f; 以先删除缓存&#xff0c;再操作数据库为例 多个线程运行的正常的流程应该如下…

从零开始:前端架构师的基础建设和架构设计之路

文章目录 一、引言二、前端架构师的职责三、基础建设四、架构设计思想五、总结《前端架构师&#xff1a;基础建设与架构设计思想》编辑推荐内容简介作者简介目录获取方式 一、引言 在现代软件开发中&#xff0c;前端开发已经成为了一个不可或缺的部分。随着互联网的普及和移动…

Istio Wasm插件

目录 本节实战 实战名称&#x1f6a9; 实战&#xff1a;使用EnvoyFilter部署Wasm插件-2023.12.16(测试成功)&#x1f6a9; 实战&#xff1a;使用WasmPlugin部署Wasm插件-2023.12.16(测试成功) 原文链接 Istio Wasm插件 https://onedayxyy.cn/docs/Istio-Wasm 前言 WebAsse…