Docker构建Golang项目常见问题

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

相关推荐

  1. golang变量常见问题总结

    2024-04-21 20:18:08       31 阅读
  2. Docker常见问题

    2024-04-21 20:18:08       35 阅读
  3. 编程笔记 Golang基础 012 项目构建

    2024-04-21 20:18:08       44 阅读
  4. 20个 Golang 常见面试问题

    2024-04-21 20:18:08       33 阅读
  5. springboot项目docker分层构建

    2024-04-21 20:18:08       43 阅读
  6. Docker笔记:简单部署 nodejs 项目golang 项目

    2024-04-21 20:18:08       55 阅读
  7. Docker 项目如何使用 Dockerfile 构建镜像?

    2024-04-21 20:18:08       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 20:18:08       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 20:18:08       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 20:18:08       82 阅读
  4. Python语言-面向对象

    2024-04-21 20:18:08       91 阅读

热门阅读

  1. 大模型日报2024-04-20

    2024-04-21 20:18:08       50 阅读
  2. Linux常用命令

    2024-04-21 20:18:08       31 阅读
  3. 【数学】常用等价无穷小及其注意事项示例

    2024-04-21 20:18:08       40 阅读
  4. CentOS常见的命令

    2024-04-21 20:18:08       40 阅读
  5. 常用渗透测试checklist

    2024-04-21 20:18:08       30 阅读
  6. 关于DDD设计模式的各种疑问:什么是DDD架构?

    2024-04-21 20:18:08       30 阅读
  7. iOS Delegate receiver 如何返回值给 sender

    2024-04-21 20:18:08       33 阅读
  8. UML绘制

    2024-04-21 20:18:08       33 阅读
  9. 怎么直连某个服务器的dubbo服务

    2024-04-21 20:18:08       34 阅读