Docker, Live reload och bind mounts

Permalänk
Medlem

Docker, Live reload och bind mounts

Hej,

Jag ska bygga ett enkelt Go-api och hade tänkt att göra detta med hjälp av docker. Jag har försökt att få till en Live reload-lösning (kör bind mount) så att jag ska slippa att starta om containern konstant, något som har krånglat något fantastiskt. Först testade jag Air utan lycka. Därefter testade jag Watchexec. Med Watchexec har jag fått det att fungera.

Nu till det skumma! Om jag kör "docker compose up" i en extern terminal, helt frikopplad från Vs Code, så ser inte containern ändringarna jag gör i VS code. Go-appen startas alltså inte om, ingen live reload sker. Om jag däremot gör en "docker compose up" i den integrerade terminalen i VS code så fungerar allt felfritt och ändringar plockas upp av containern/watchexec.

Detta stör mig då jag gärna tittar på docker/container-loggen i en extern terminal medans jag använder den interna VS code-terminalen till annat. Vad tror ni detta kan komma sig?

Specs:
MacOS 11.7.2
Docker Desktop
Bind mountad volym från host till container

Permalänk
Medlem

Jag har svårt att föreställa mig din uppsättning, några exempel hade underlättat. Hur kör du watchexec? Vad bind-monteras? Hur kompileras Go-koden om? Vad är det för container? Hur ser din compose-fil ut?

Permalänk

Nu kör jag inte Mac utan Linux och jag har inte testat exakt din setup med autoreload utan jag har kört node. Men det kan inte ha något med sandlådan i VSCode att göra?

https://code.visualstudio.com/blogs/2022/11/28/vscode-sandbox

Permalänk
Medlem
Skrivet av orp:

Jag har svårt att föreställa mig din uppsättning, några exempel hade underlättat. Hur kör du watchexec? Vad bind-monteras? Hur kompileras Go-koden om? Vad är det för container? Hur ser din compose-fil ut?

Såklart, jag borde nog inkluderat detta från början. Testar att klistra in innehållet i filerna här.

Dockerfile FROM golang:alpine WORKDIR /app ENV WATCHEXEC_VERSION 1.14.0 RUN apk update && apk add curl && curl -L https://github.com/watchexec/watchexec/releases/download/${WA... | tar xvJ && \ mv watchexec-${WATCHEXEC_VERSION}-x86_64-unknown-linux-musl/watchexec /bin/watchexec COPY go.mod . RUN go mod download COPY . . EXPOSE 8080

docker-compose.yml app: build: ./server command: ./scripts/local-entrypoint.sh # command: go run main.go volumes: - './server:/app' ports: - 8080:8080

local-entrypoint.sh #!/bin/sh set -e while true; do watchexec --restart --exts "go,html" --watch . "go run *.go" echo "restarting process" done

Permalänk
Medlem

Jag skulle gissa på att den där compose-filen inte har giltig syntax. Saknas inte services?

services: app: ...

https://docs.docker.com/compose/compose-file/

Permalänk
Medlem
Skrivet av orp:

Jag skulle gissa på att den där compose-filen inte har giltig syntax. Saknas inte services?

services: app: ...

https://docs.docker.com/compose/compose-file/

Observant! Jag valde dock att inte ta med hela filen, tog bara med app eftersom det är den servicen som krånglar :)!

EDIT: Det vill säga att composefilen är giltig, jag bara valde att inte ta med hela här på sweclockers.

Permalänk
Medlem

Vad säger `docker-compose logs` och `docker-compose ps -a` när det misslyckas?