2014-04-19 18 views
5

Đây là Dockerfile của tôi.nhận được "không thể tìm thấy gói" đang cố gắng để xây dựng ứng dụng của tôi trong một docker container

FROM ubuntu 
MAINTAINER me <[email protected]> 
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 

Nó xây dựng tốt:

sudo docker build -t ubuntu-go . 

nhưng khi tôi chạy nó tôi nhận được một lỗi gói:

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

Các lỗi trông giống như:

src/feed/feed.go:7:2: cannot find package "github.com/gorilla/feeds" in any of: /usr/local/go/src/pkg/github.com/gorilla/feeds (from $GOROOT) /go/src/github.com/gorilla/feeds (from $GOPATH)

Đó là lẻ vì "go install" không cài đặt de và trong khi "go get github.com/gorilla/feeds" trước đó hoàn thành không có lỗi. Vì vậy, có lẽ tôi có một con đường hoặc vấn đề môi trường nhưng tất cả các ví dụ trông giống như thế này.

PS: mã của tôi nằm ở/đi/src/thức ăn chăn nuôi (feed.go)

package main 

import (
    "net/http" 
    "time" 

    "github.com/gorilla/feeds" 
) 

. . . 

UPDATE: khi tôi biểu diễn "đi lấy" bằng tay và sau đó đưa ra các "chạy" nó dường như công việc. Vì vậy, nó xuất hiện rằng "RUN go get" được lưu trữ tập tin của tôi trong ether thay vì khối lượng của máy chủ của tôi.

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

sau đó

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

(các tập tin được đặt tại của tôi ~/đi/src/githum.com và ~/đi/thư mục pkg.)

UPDATE: Nó xảy ra với tôi rằng trong suốt bước BUILD, khối lượng/đi chưa được đính kèm vào hình ảnh docker. Vì vậy, về cơ bản nó được gán cho nil. Nhưng sau đó trong quá trình chạy "cài đặt" nên đã lấy ra nó deps.

CUỐI CÙNG: Công việc này nhưng rõ ràng không phải là phương pháp ưa thích:

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

thông báo rằng tôi biểu diễn "đi lấy" trong CMD chứ không phải là một RUN.

+1

'đi get' tự động recurses phụ thuộc, vì vậy hơn là lấy một cách rõ ràng khỉ đột, bạn chỉ nên chạy' đi get' trên của bạn gói riêng và nó sẽ tìm nạp/cài đặt tất cả các phụ thuộc ở đúng nơi. Điều này sẽ đơn giản hóa mọi thứ nếu bạn đã thêm ít phụ thuộc hơn. – Evan

+0

gói của tôi là địa phương trong thời gian hiện tại và do đó sẽ không hoạt động. Ngoài ra, "đi cài đặt" là nghĩa vụ phải recurse quá, nhưng nó không. "go get" được ghi lại là một cách thích hợp để cài đặt các gói. Nó cũng là cách ưu tiên để ngăn chặn các lỗi HEAD từ các phụ thuộc từ leo vào. – Richard

+1

Tôi cho rằng bạn đã làm việc này nhưng để nó cho bất kỳ ai khác gặp vấn đề này, bây giờ có một [hình nền cho các ứng dụng golang trên Docker] (https: //blog.golang.org/docker) có vẻ đơn giản hơn –

Trả lời

Các vấn đề liên quan