es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.
enter image description here

Si se ejecuta localmente, todo funciona bien.
enter image description here

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
Tags:  , , ,

Answer

  1. Avatar for 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 con air, también se debe asignar el directorio /tmp dentro del contenedor a un directorio local, para que air 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:

    go:
      container_name: go
      build:
        dockerfile: Dockerfile
        context: ./
      volumes:
        - ./:/app
        - ./tmp:/app/tmp
      ports:
        - '8080:8080'
    

    Aquí agregamos la asignación del directorio /tmp dentro del contenedor al directorio ./tmp del directorio de código local. Esto asegurará que air pueda monitorear los cambios y reconstruir la aplicación según sea necesario.

Comments are closed.