Linux下使用Docker部署go_web(包含错误以及解决办法)

Docker配置

安装Docker

官方文档
安装

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io

启动

systemctl start docker

配置镜像加速(可忽略)

三个国内源:
	阿里(收费)
	网易(免费)
	中国科学技术大学源(免费)

进入编辑模式

vi /etc/docker/daemon.json	

粘贴以下代码并保存退出

{
	"registry-mirrors":["http://hubmirror.c.163.com","https://docker.mirrors.ustc.educn"]
}

重新加载配置并重启Docker

sudo systemctl daemon-reload
systemctl restart docker

Linux下部署

参考Qimi李文周博客文献

本地编写代码以及DockerFile文件

Dockerfile

#拉取哪个镜像
FROM golang:alpine AS builder

# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOPROXY=https://goproxy.cn,direct \
    GOARCH=amd64

# 移动到工作目录:/build
WORKDIR /build

# 复制项目中的 go.mod 和 go.sum文件并下载依赖信息
COPY go.mod .
COPY go.sum .
RUN go mod download

# 将代码复制到容器中
COPY . .

# 将我们的代码编译成二进制可执行文件 bubble
RUN go build -o bulebell_app .

###################
# 接下来创建一个小镜像
###################
FROM scratch

COPY ./templates /templates
COPY ./static /static
COPY ./conf /conf

# 从builder镜像中把/dist/app 拷贝到当前目录
COPY --from=builder /build/bulebell_app /

# 需要运行的命令
ENTRYPOINT ["/bulebell_app", "conf/config.yaml"]

拉取所需要的镜像

准备可能用到的镜像,比如Mysql,Redis

docker pull mysql
docker pull redis

将文件上传至服务器

可通过编译器长传至服务器(goland)或者(xshell)等

在这里插入图片描述

编译执行

在项目目录下,执行下面的命令创建镜像,并指定镜像名称
docker build . -t bulebell_app

创建关联容器(mysql,redis等)

docker run --name mysql3306 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /Users/yao/docker/mysql:/var/lib/mysql -d mysql
docker run --name redis6379 -p 6379:6379  -v /Users/yao/docker/redis:/var/lib/redis -d redis

运行容器

docker run --link=mysql3306:mysql3306 --link=redis6379:redis6379  -p 8080:8080 bulebell_app

在这里插入图片描述

常见错误

链接数据库失败

检查是否可以用Navicat软件连接上数据库:

如果可以:那么检查项目中config配置以及Dockerfile文件中的(端口,用户,密码)是否和容器一致。

如果不可以:检查数据库容器是否在运行,启动容器即可

运行时报错

重启Docker

docker: Error response from daemon:......

启动服务却访问超时

检查安全组是否有这个端口
防火墙没有允许这个端口的访问

# 防火墙设置
systemctl status firewalld		查看firewalld状态 (防火墙)
systemctl start firewalld	开启防火墙
systemctl stop firewalld	关闭防火墙

# 端口设置
sudo firewall-cmd --list-all	查看防火墙中允许访问的端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent	使其开启8080端口
sudo firewall-cmd --reload	重启防火墙

端口被占用

netstat -tln  查找所有端口信息
netstat -tln | grep 8080  	仅查找8080端口的占用信息

lsof -i :8080 	查看端口属于哪个程序?端口被哪个进程占用

kill -9 进程id  杀掉占用端口的进程

.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值