Selbst wenn ich den Code geändert habe, hat sich das Verhalten der App im Container nicht geändert, was ein Problem war. Dies ist ein Memo darüber, wie man damit umgeht. (Es ist nicht das System, auf dem der Cache funktioniert hat)
Die in der Docker-Datei erstellte "App" (Ausführungsdatei) wurde von der "App" im lokalen Verzeichnis der in "docker-compose.yml" festgelegten Volumes überschrieben. Deshalb habe ich es gelöst, indem ich es so geändert habe, dass es nicht übermäßig montiert wird.
Problem
main.go
.Verzeichnisstruktur ↓
myapp
- docker-compose.yml
- Go
- Dockerfile
- main.go
- app
Teilcode-Auszug ↓
Dockerfile
FROM golang:1.12.12-alpine3.9 AS build
ENV GOPATH $GOPATH:/go
ENV PATH $PATH:$GOPATH/bin
ENV GO111MODULE=on
hogehoge
COPY . /go/src/app
WORKDIR /go/src/app
RUN go build -o app main.go
CMD ["./app"]
docker-compose.yml
version: '2'
services:
app:
build:
context: ./Go
dockerfile: Dockerfile
volumes:
- "./Go:/go/src/app"
container_name: go_app
ports:
- "127.0.0.1:8080:8080"
tty: true
restart: always
Die Ursache war die lokale App, die ich erstellen wollte. Die Befehlsausführungsreihenfolge lautet "RUN → Volumes → CMD", und die im Container integrierte "App" wurde mit der lokalen "App" überschrieben.
In diesem Fall mussten nur die Sitzungsinformationen beibehalten und gespeichert werden, sodass diese eine Datei für die Freigabe der Datei ausreichte.
docker-compose.yml
volumes:
- "./Go/sessions:/go/src/app/sessions"
Während der Entwicklung ist es bequemer, den Quellcode bereitzustellen und zu bearbeiten. Daher dachte ich, es wäre eine gute Idee, nicht nur "App" zu teilen. (So schließen Sie einige beim Mounten von Volume mit Docker aus)
Erstens geschah dies, während ich Codeänderungen vornahm, um die Sitzungsinformationen dauerhaft zu machen. (Es gibt auch einen Unterschied zwischen dem Produktionsserver und dem Entwicklungsserver.) Schließlich werden wir zur Datenbankverwaltung übergehen. (Von welchem)
Recommended Posts