我有一个Go应用。它的某些依赖项位于私有的Github存储库中,另一部分依赖项是我的应用文件夹中的本地包。该应用程序可以在我的计算机上编译并正常运行(当我仅在没有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在第二部分中运行get / go / src / SCMicroServer 。我在提到的步骤中收到此错误:
程序包SCMicroServer / controllers / package1:无法识别的导入路径“ SCMicroServer / controllers / package1”(导入路径不是以主机名开头)
命令'/ bin / sh -c go get / go / src / SCMicroServer'返回了非零代码:1
“ SCMicroServer / controllers / package1”是我的应用程序文件夹(或其子文件夹)中的本地软件包之一,而我的本地文件夹中还有更多软件包。我在Dockerfile中设置了GOPATH env变量,所以我不确定自己缺少什么。
答案 0 :(得分:0)
我找到了答案,这并不是真正的Dockerfile问题,我在主文件中以2种不同的方式两次引用了我的包:
package1 "SCMicroServer/controllers/package1"
"SCMicroServer/controllers/package1"
删除第二个后,我停止接收该错误。