【发布时间】: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