【问题标题】:Import path does not begin with hostname导入路径不以主机名开头
【发布时间】:2020-03-13 21:46:33
【问题描述】:

我有一个 Go 应用程序。它的一些依赖项位于私有 Github 存储库中,而另一部分依赖项是我的 app 文件夹中的本地包。该应用程序在我的计算机上编译和运行没有问题(当我在没有 docker 的情况下简单地编译它时)。我正在使用下面的 Dockerfile。

FROM ubuntu as intermediate

# install git
RUN apt-get update
RUN apt-get install -y git


RUN mkdir /root/.ssh/
COPY github_rsa.ppk /root/.ssh/github_rsa.ppk
RUN chmod 700 /root/.ssh/github_rsa.ppk

RUN eval $(ssh-agent) && \
    ssh-add /root/.ssh/github_rsa.ppk && \
    ssh-keyscan -H github.com >> /etc/ssh/ssh_known_hosts && \
    git clone git@github.myusername/shared.git


FROM golang:latest
ENV GOPATH=/go

RUN echo $GOPATH

ADD . /go/src/SCMicroServer
WORKDIR /go/src/SCMicroServer
COPY --from=intermediate /shared /go/src/github.com/myusername/shared
RUN go get /go/src/SCMicroServer
RUN go install SCMicroServer
ENTRYPOINT /go/src/SCMicroServer
EXPOSE 8080

与 Git 相关的第一个构建部分运行良好,直到这一行:RUN go get /go/src/SCMicroServer 在第二部分。我在提到的步骤中收到此错误:

包 SCMicroServer/controllers/package1:无法识别的导入路径“SCMicroServer/controllers/package1”(导入路径不以主机名开头)
命令 '/bin/sh -c go get /go/src/SCMicroServer' 返回一个非零代码:1

“SCMicroServer/controllers/package1”是我的应用程序文件夹(或其子文件夹)中的本地包之一,我的本地文件夹中有更多。我在我的 Dockerfile 中设置 GOPATH 环境变量,所以我不确定我缺少什么。

【问题讨论】:

  • 看起来您正在使用相对导入路径。 Don't do that.
  • go get 适用于包名称,而不是文件系统路径。它们可能相关,但不是一回事。
  • 我检查了链接,我正在使用链接中推荐的相同方式导入:import ("SCMicroServer/controllers/package1") @Flimzy
  • @JimB 当我将该行更改为“RUN go get SCMicroServer”时,我仍然收到相同的错误。
  • @Mazdak:在模块之外,go 需要一个主机名来定位go get 的包。您不会尝试获取软件包的远程副本,因此如果您想构建 SCMicroServer,请在该目录中工作。

标签: docker go dockerfile


【解决方案1】:

我找到了答案,这并不是真正的 Dockerfile 问题,我在主文件中以 2 种不同的方式引用了我的包 2 次:

package1 "SCMicroServer/controllers/package1"
"SCMicroServer/controllers/package1"

删除第二个后,我不再收到错误消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 2015-06-28
    • 2023-04-04
    • 2016-09-16
    • 1970-01-01
    • 2021-10-15
    相关资源
    最近更新 更多