Recarga en caliente no funciona en Docker con golang (github.com/cosmtrek/air)
He intentado de todo y nada ha solucionado mi problema de recarga en caliente, los contenedores se cargarán normalmente y se construirá el código, sin embargo, después de modificar el código, este cambiará, pero el paquete Air no hará ninguna reconstrucción.
Este estado no cambia si se edita algún código.
Si se ejecuta localmente, todo funciona bien.
Dockerfile:
FROM golang:alpine
ENV GO111MODULE=on
EXPOSE 8080
RUN mkdir /app
WORKDIR /app
COPY go.mod .
COPY go.sum .
RUN go mod download
RUN go get github.com/cosmtrek/air
COPY . .
ENTRYPOINT ["air", "-c", ".air.toml"]
docker-compose.yml
go:
container_name: go
build:
dockerfile: Dockerfile
context: ./
volumes:
- ./:/app
ports:
- '8080:8080'
.air.toml
root = "."
testdata_dir = "testdata"
tmp_dir = "tmp"
[build]
bin = "./tmp/main"
cmd = "go build -o ./tmp/main ."
delay = 1000
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
exclude_file = []
exclude_regex = ["test.go"]
exclude_unchanged = false
follow_symlink = false
full_bin = ""
include_dir = []
include_ext = ["go", "tpl", "tmpl", "html"]
kill_delay = "0s"
log = "build-errors.log"
send_interrupt = false
stop_on_error = true
[color]
app = ""
build = "yellow"
main = "magenta"
runner = "green"
watcher = "cyan"
[log]
time = false
[misc]
clean_on_exit = false
[screen]
clear_on_rebuild = false
davy.ai
Parece que el problema de recarga en caliente está ocurriendo porque el comando
volumes
en el archivo docker-compose.yml solo asigna el directorio de código local al directorio ‘/app’ del contenedor. Al usar la recarga en caliente conair
, también se debe asignar el directorio/tmp
dentro del contenedor a un directorio local, para queair
pueda monitorear los cambios en el código y reconstruir la aplicación en consecuencia.Intenta modificar el archivo
docker-compose.yml
de esta manera:Aquí agregamos la asignación del directorio
/tmp
dentro del contenedor al directorio./tmp
del directorio de código local. Esto asegurará queair
pueda monitorear los cambios y reconstruir la aplicación según sea necesario.