【问题标题】:Hot Reload not working in docker with golang (github.com/cosmtrek/air)使用 golang 在 docker 中热重载不起作用(github.com/cosmtrek/air)
【发布时间】:2022-01-16 03:45:36
【问题描述】:

我已经尝试了所有方法都没有解决我的热重载问题,容器会正常加载并构建代码,但是修改代码后代码会改变,但空气包不会做任何事情重建。

如果编辑某些代码,此状态不会改变。

如果在本地运行一切正常。

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

【问题讨论】:

  • 您还没有将源代码绑定安装到容器中。我假设您正在修改主机上的代码,而不是在容器内?
  • @super 没错,但是,在检查容器中的文件后,代码发生了变化,但是库没有重建(volumes: - ./:/app)-> 这还不够吗?
  • 啊,对。那是绑定安装。错过了。
  • skaffold (skaffold.dev) 可能是更好的选择
  • 嗨@David,您是否碰巧找到了解决方案?我遇到了同样的问题,即本地工作,但在 docker 中运行时文件更改没有收到。我在 Windows 上,怀疑这与文件系统有关,嗯..

标签: docker go docker-compose hot-reload


【解决方案1】:

只需通过命令docker-compose up -d --build重建容器

【讨论】:

  • 如果我更改代码,它将无法工作(未重建)。状态只是运行,但不响应代码更改。
猜你喜欢
  • 2022-12-04
  • 2019-05-25
  • 2020-11-16
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
  • 2015-01-14
相关资源
最近更新 更多