[GO] Tipps zum Ausführen Gehen Sie mit Docker
docker image
Referenz von Mustern mit go mod
#Bild erstellen
FROM golang:1.13 AS builder
WORKDIR /go/src
##Laden Sie abhängige Bibliotheken herunter(Ich möchte den Cache verwenden, also mache ich das zuerst)
ENV GO111MODULE=on
COPY go.mod go.sum ./
RUN go mod download
ADD . /myapp
WORKDIR /myapp
## main.Kompilieren Sie go und speichern Sie die Ausführungsbinärdatei
RUN CGO_ENABLED=0 GOOS=linux go build -o server ../myapp/cmd/main.go
# run-Zeitbild
FROM alpine:3.10
COPY --from=builder /myapp/server /app
EXPOSE 50051
ENTRYPOINT ["/app"]
Referenz von Mustern mit dep
#Bild erstellen
FROM golang:1.13 AS builder
ADD . /go/src/github.com/myself/myapp
WORKDIR /go/src/github.com/myself/myapp
##Abhängige Installation und Abhängigkeitsauflösung
RUN go get github.com/golang/dep/cmd/dep
RUN dep ensure
## main.Kompilieren Sie go und speichern Sie die Ausführungsbinärdatei
RUN CGO_ENABLED=0 GOOS=linux go build -o server /myapp/cmd/main.go
# run-Zeitbild
FROM alpine:3.10
COPY --from=builder /go/src/github.com/myself/myapp/server /app
EXPOSE 50051
ENTRYPOINT ["/app"]
Verstopfter Punkt
kann Paket nicht finden
Fehler in go build
- Höchstwahrscheinlich ist der Pfad falsch oder die Datei fehlt
Pakete gegründet A und B
Fehler beim Go Build
- Es gibt mehrere Pakete im selben Verzeichnis
- Das Folgende ist ein Kompilierungsfehler
- Platzieren Sie mehrere Hauptpaketmodule im Zielverzeichnis
--Put Module mit unterschiedlich benannten Paketdeklarationen in dasselbe Verzeichnis
--Dateien, die mit "_test" enden, werden als Testcode interpretiert, sodass sie ausnahmsweise als mehrere Elemente platziert werden können.
- Übrigens ist es sicher, ein Paket mit einem anderen Namen als dem Verzeichnis zu deklarieren.
- Weil es auf Pfadbasis anstelle eines Paketnamens importiert
In go get verwendet XX keinen bekannten Versionskontrollsystem
-Fehler
- https://github.com/gobuffalo/buffalo/issues/694#issuecomment-337032375
- Basierend auf dem oben Gesagten habe ich die Zieldateien unter "/ vendor" gelöscht und es hat aus irgendeinem Grund funktioniert
dep stellen Sie sicher, dass / hoge nicht innerhalb eines bekannten GOPATH / src
-Fehlers liegt
――Ich weiß es nicht, aber die Verzeichnisstruktur scheint nutzlos zu sein
- Ein Merkmal der Verzeichnisstruktur von Go ist, dass der gesamte Quellcode unter der Umgebungsvariablen "$ GOPATH / src" platziert wird.
- Es gibt zwei Lösungen:
- Platzieren Sie das Repository unter
/ go / src
im Container
- Setzen Sie einen symbolischen Link
dep Stellen Sie sicher, dass der Root-Projektimport: dep unterstützt derzeit nicht die Verwendung von GOPATH / src als Projekt-Root-Fehler
- Das Arbeitsverzeichnis wurde als "GOPATH / src" angegeben, aber es wurde behoben, indem es in "GOPATH / src / app" geändert wurde.
Wenn dep beim Docker-Build sichergestellt ist, werde ich wütend, weil ich nicht auf Github wie "fatal: Zugriff auf Benutzername für" http: // github.com "~" nicht zugreifen kann
- Wenn Sie Ressourcen aus einem privaten Repository entnehmen, müssen Sie Github-Token usw. verwenden.
――Jedoch sollten Sie in der Lage sein, den lokalen Pfad zu verwenden, wenn Sie die Ressourcen Ihres eigenen Repositorys nutzen. Wenn Sie es nicht bekommen können, ist es wahrscheinlich, dass der Pfad falsch ist
- Tatsächlich konnte ich das Docker-Arbeitsverzeichnis von "go / src / app" in "/ go / src / github.com / ich / meine-App" ändern
Wenn ich einen Docker-Lauf mache, ärgere ich mich über den Exec-Benutzerprozess, der "keine solche Datei oder kein solches Verzeichnis" verursacht hat
--Recent Go-Binärdateien scheinen eine dynamische Verknüpfung herzustellen, was zu passieren scheint, weil die Verknüpfung nicht vorhanden ist.
- Sie können zum Zeitpunkt der Erstellung "CGO_ENABLED = 0" hinzufügen