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.
'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
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
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 –