美文网首页
go build 报错 unexpected directory

go build 报错 unexpected directory

作者: cnwinds | 来源:发表于2020-02-28 17:55 被阅读0次

    问题描述

    写了个grpc服务并编译成docker,在docker中执行go build的时候出现了以下错误

    unexpected directory layout:
            import path: _/go/src/uuid
            root: /go/src
            dir: /go/src/uuid
            expand root: /go
            expand dir: /go/src/uuid
            separator: /
    

    错误提示的意思是:意外的目录布局。
    查看容器中目录结构

    ├── api
    ├── github.com
    ├── go
    ├── golang.org
    ├── google.golang.org
    ├── rpc_server.go
    └── uuid
    

    dockerfile文件内容

    FROM golang:alpine AS builder
    WORKDIR $GOPATH/src
    # RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
    # RUN apk add git
    # RUN go get -u github.com/gorilla/mux
    # RUN go get -u google.golang.org/grpc
    COPY . .
    RUN go build rpc_server.go
    

    这里直接用注释掉的go get命令安装依赖包是不会出现这个问题的。但是因为墙的原因mux,grpc的拉取非常慢,这里把拉取好的文件直接复制进去。可能build系统认为依赖库和项目代码放在同一层目录不合理,其实这里只要把依赖和项目代码分成不同目录就可以解决了。

    解决方法

    将依赖项目放在$GOPATH/src下,自己的项目代码创建一个新目录存放,dockerfile文件改成如下内容

    FROM golang:alpine AS builder
    WORKDIR $GOPATH/src
    COPY  github.com github.com
    COPY golang.org golang.org
    COPY google.golang.org google.golang.org
    WORKDIR uuid_service
    COPY api api
    COPY go go
    COPY uuid uuid
    COPY rpc_server.go
    RUN go build rpc_server.go
    
    FROM alpine:latest AS production
    WORKDIR /uuid_service
    COPY --from=builder /uuid_service/rpc_server .
    EXPOSE 13000
    ENTRYPOINT ["./rpc_server"]
    

    重新执行docker build命令通过。

    相关文章

      网友评论

          本文标题:go build 报错 unexpected directory

          本文链接:https://www.haomeiwen.com/subject/gdglhhtx.html