【问题标题】:getting "cannot find package" trying to build my application in a docker container尝试在 docker 容器中构建我的应用程序时出现“找不到包”
【发布时间】:2014-06-03 23:04:11
【问题描述】:

这是我的 Dockerfile。

FROM ubuntu
MAINTAINER me <my@email.com>
RUN apt-get update && apt-get install -y \
build-essential \
curl \
git \
make
# Get and compile go
RUN curl -s https://go.googlecode.com/files/go1.2.1.src.tar.gz | tar -v -C /usr/local -xz
RUN cd /usr/local/go/src && ./make.bash --no-clean 2>&1
ENV PATH /usr/local/go/bin:/go/bin:$PATH
ENV GOPATH /go
RUN go get github.com/gorilla/feeds
WORKDIR /go 
CMD go version && go install feed && feed

它构建得很好:

sudo docker build -t ubuntu-go .

但是当我运行它时,我得到一个包错误:

sudo docker run -v /home/rbucker/go:/go --name go ubuntu-go

错误看起来像:

src/feed/feed.go:7:2:在以下任何一个中都找不到包“github.com/gorilla/feeds”: /usr/local/go/src/pkg/github.com/gorilla/feeds(来自 $GOROOT) /go/src/github.com/gorilla/feeds(来自 $GOPATH)

这很奇怪,因为“go install”没有安装依赖项,而之前的“go get github.com/gorilla/feeds”完成时没有错误。所以大概我有一个路径或环境问题,但所有的例子看起来都像这个。

PS:我的代码位于 /go/src/feed (feed.go)

package main

import (
    "net/http"
    "time"

    "github.com/gorilla/feeds"
)

. . .

更新:当我手动执行“go get”然后启动“运行”时,它似乎工作。因此,“RUN go get”似乎将我的文件存储在以太而不是主机的卷中。

sudo docker run -v /home/rbucker/go:/go --name go ubuntu-go /bin/bash

然后

sudo docker run -v /home/rbucker/go:/go --name go ubuntu-go

(文件位于我的 ~/go/src/githum.com 和 ~/go/pkg 文件夹中。)

更新:在我看来,在 BUILD 步骤期间,/go 卷尚未附加到 docker 映像。所以它本质上被赋值为 nil。但是在运行期间,“get install”应该已经检索到了它的 deps。

最后:这可行,但显然不是首选方法:

CMD go get github.com/gorilla/feeds && go version && go install feed && feed

请注意,我在 CMD 中执行了“go get”而不是 RUN。

【问题讨论】:

  • go get 自动递归依赖关系,因此您应该只在自己的包上运行go get,而不是显式获取大猩猩,它应该在正确的位置获取/安装所有依赖关系。如果您至少添加更多依赖项,这应该会简化事情。
  • 我的包暂时是本地的,所以这不起作用。此外,“go install”也应该递归,但它没有。 “go get”被记录为安装软件包的适当方式。这也是防止 HEAD 错误从依赖项蔓延的首选方法。
  • 我假设您已经完成了这项工作,但将其留给遇到此问题的其他人,现在有一个 base image for golang apps on Docker 似乎更简单
  • @Richard 请阅读Can I answer my own question?

标签: go docker


【解决方案1】:

我通过使用解决了类似的问题

go get ./...

来源: https://coderwall.com/p/arxtja/install-all-go-project-dependencies-in-one-command

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多