Docker构建Golang项目常见问题

本文详细介绍了在使用Docker构建Golang项目时遇到的常见问题,如Dockerfile错误、go.mod版本不兼容和启动文件指定问题。提供了相应的解决方法,包括更新镜像版本和正确设置启动文件路径。
摘要由CSDN通过智能技术生成

1 Dockerfile

1.1 dockerfile报错:failed to read expected number of bytes: unexpected EOF

可能是docker拉取的镜像版本导致的问题的出现。

解决办法:

  1. 使用docker pull {镜像名称},单独拉取构建时所需的基础镜像。
  2. 更改Dockerfile中的镜像版本。

1.2 go mod tidy: go.mod file indicates go 1.21, but maximum supported version is 1.17

在这里插入图片描述
因为Dockerfile中基础镜像是golang:alpine。查看golang:alpine可以看到里面的golang版本是1.17.5

解决办法:更改Dockerfile中基础镜像为golang:1.21。

1.3 是否指定启动文件问题

FROM golang:1.21 AS builder

LABEL stage=gobuilder

ENV GOOS linux
ENV GOARCH amd64
ENV CGO_ENABLED 0
ENV GO111MODULE on
ENV GOPROXY https://goproxy.cn,direct

ARG AppDir

WORKDIR /build

ADD ${AppDir}/go.mod .
ADD ${AppDir}/go.sum .
ADD core .

RUN go mod tidy && go mod download

COPY . .
COPY ${AppDir}/etc /app/etc

# 指定启动文件
RUN #cd ${AppDir} && go build -ldflags="-s -w" -o /app/app ./cmd/main.go
# 不指定1
RUN #cd ${AppDir} && go build -ldflags="-s -w" -o /app/app *.go
# 不指定 构建的时候会自己去找.go文件
RUN cd ${AppDir} && go build -ldflags="-s -w" -o /app/app

FROM scratch

ARG AppDir
LABEL xxx.net.service=${AppDir}
LABEL xxx.net.slslog=true

COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Shanghai
ENV TZ Asia/Shanghai

WORKDIR /app
COPY --from=builder /app/app /app/app
COPY --from=builder /app/etc /app/etc

CMD ["./app", "-f", "etc/config.yaml"]

2 构建及部署

  1. 构建
docker build -t ucenter-rpc:0.0.1 -f Dockerfile .
  1. Docker创建网络
docker network create --driver=bridge zero_bridge_network
  1. 创建配置文件及日志目录
mkdir -p /opt/soft/go-zero/deploy/ucenter-rpc/etc
mkdir -p /opt/soft/go-zero/deploy/ucenter-rpc/logs
  1. docker-compose
version: "3.1"
services:
  ucenter_rpc:
    container_name: dcv3_ucenter_rpc_service
    image: 镜像
    restart: on-failure
    ports:
      - 8080:8080
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /opt/soft/go-zero/deploy/ucenter-rpc/etc:/app/etc
      - /opt/soft/go-zero/deploy/ucenter-rpc/logs:/app/logs
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://localhost:6470/healthz" ]
      interval: 1m30s
      timeout: 10s
      retries: 3
      start_period: 40s

networks:
  default:
    external:
      name: go-zero_bridge_network
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值