Đâ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.
'đ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
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
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 –