热插件无法在golang的docker中工作(github.com/cosmtrek/air)

50few1ms  于 2023-10-14  发布在  Go
关注(0)|答案(4)|浏览(128)

我已经尝试了所有方法,但都没有解决我的热重载问题,容器将正常加载,代码将被构建,然而,修改代码后,代码会改变,但air包不会做任何重建。
如果编辑某些代码,此状态不会更改。

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

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
pprl5pva

pprl5pva1#

我知道这是一个老问题,但我最近遇到了这个问题,终于设法解决了它。所以我把我的答案留在这里,以防对其他用户有帮助。
正如我在一些评论中所读到的,这个问题确实是由于Air使用事件通知(fsnotify)和这个does not propagate correctly between the windows system and the docker containers。然而,这在Linux上确实可以正常工作,因此我们目前可以选择的唯一解决方案如下:

在Windows上安装WSL 2

WSL 2允许我们在Windows系统中安装一个Linux发行版,以便使用它的工具、实用程序和文件系统。多亏了这一点,我们将能够解决事件传播的问题,通过将我们的存储库副本移动到Linux文件系统并对其进行处理,但都在windows操作系统内。
实现这一目标的步骤如下:
1.从命令行安装Ubuntu发行版
wsl --install -d Ubuntu
1.将ubuntu设置为WSL 2的当前发行版
wsl --set-version Ubuntu 2
1.在docker中应用WSL集成
3.1进入Docker桌面->设置->资源-> WSL集成->刷新
3.2激活Ubuntu
3.3应用更改
1.从windows explorer \\wsl$\Ubuntu\访问ubuntu文件系统,并将存储库副本移动到其中。
1.安装vscode Remote的扩展- WSL
1.通过远程wsl从新位置打开vscode中的工作目录,使用:
ctrl+shift+p->在WSL中打开文件夹
1.运行命令:
docker-compose up
所有这些信息都是从今天在空气 Package 库的公开发行中获得的。

fykwrbwg

fykwrbwg2#

完美的解决方案

**问题:**Air正在启动,但在项目更改时未重新加载
**解决方案:**在.air.toml文件中添加 poll = true 这是因为Windows有一些限制,为了克服这些限制,我们将poll设置为true
代码解决方案:

poll = true
zi8p0yeb

zi8p0yeb3#

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

im9ewurl

im9ewurl4#

当您在visual studio中使用wsl打开文件夹时,问题将得到解决
enter image description here
可能有帮助:https://code.visualstudio.com/docs/remote/wsl

相关问题