2014-04-19 10 views
5

Ecco il mio file Docker.ottenere "impossibile trovare il pacchetto" cercando di compilare la mia applicazione in un contenitore mobile

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 

Costruisce bene:

sudo docker build -t ubuntu-go . 

ma quando l'eseguo ottengo un errore di pacchetto:

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

L'errore si presenta come:

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)

E ' dispari perché "go install" non sta installando il de le pendenze e mentre il precedente "go get github.com/gorilla/feeds" si completa senza errori. Quindi presumibilmente ho un problema di percorso o ambiente, ma tutti gli esempi sembrano proprio come questo.

PS: il mio codice si trova in/go/src/mangimi (feed.go)

package main 

import (
    "net/http" 
    "time" 

    "github.com/gorilla/feeds" 
) 

. . . 

UPDATE: quando ho eseguito il "vai a prendere" manualmente e poi ha lanciato il "run" è sembrato lavoro. Quindi sembra che "RUN go get" stia memorizzando il mio file nell'etere invece del volume del mio ospite.

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

poi

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

(i file sono stati situati nel mio ~/go/src/githum.com e ~/go/cartelle conf.)

UPDATE: Mi viene in mente che durante il passo BUILD il volume/vai non è stato collegato all'immagine della finestra mobile. Quindi è essenzialmente assegnato a zero. Ma poi durante la corsa il "get install" dovrebbe aver recuperato è deps.

infine: questo funziona, ma non è chiaramente il metodo preferito:

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

notare che ho eseguito il "andare a prendere" nel CMD, piuttosto che una corsa.

+1

'andare GET' recurses automaticamente le dipendenze, quindi piuttosto che andare a prendere esplicitamente gorilla si deve solo eseguire' andare GET' sul tuo proprio pacchetto e dovrebbe recuperare/installare tutte le dipendenze nei posti giusti. Questo dovrebbe semplificare le cose se si aggiungono almeno più dipendenze. – Evan

+0

il mio pacchetto è locale per ora e quindi non funzionerà. Anche "go install" dovrebbe recurse, ma non è così. "go get" è documentato come un modo appropriato per installare i pacchetti. È anche il modo preferito per evitare che i bug di HEAD dalle dipendenze si insinuino. – Richard

+1

Suppongo che tu abbia funzionato, ma lasciandolo per chiunque incontri questo problema, ora c'è un [immagine di base per le app golan su Docker] (https: //blog.golang.org/docker) che sembra più semplice –

risposta