为了账号安全,请及时绑定邮箱和手机立即绑定

使用 golang 在 docker 中热重载不起作用

使用 golang 在 docker 中热重载不起作用

Go
泛舟湖上清波郎朗 2022-10-17 19:26:50
我已经尝试了所有方法都没有解决我的热重载问题,容器将正常加载并构建代码,但是修改代码后代码会改变,但空气包不会进行任何重建。如果编辑某些代码,此状态不会改变。如果在本地运行一切正常。 Dockerfile:FROM golang:alpineENV GO111MODULE=onEXPOSE 8080RUN mkdir /appWORKDIR /appCOPY go.mod .COPY go.sum .RUN go mod downloadRUN go get github.com/cosmtrek/airCOPY . .ENTRYPOINT ["air", "-c", ".air.toml"]码头工人-compose.yml   go:    container_name: go    build:      dockerfile: Dockerfile      context: ./    volumes:      - ./:/app    ports:      - '8080:8080'.air.tomlroot = "."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
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

我看到这是一个老问题,但我最近遇到了这个问题,终于设法解决了。所以我把我的答案留在这里,以防它帮助其他用户。

正如我在一些评论中所读到的,问题确实是由于 Air 使用事件通知 (fsnotify) 并且这不能在 windows 系统和 docker 容器之间正确传播。但是,这在 linux 上确实可以正常工作,因此我们目前可以选择的唯一解决方案如下:

在 Windows 上安装 WSL2

WSL2 允许我们在我们的 Windows 系统中安装 Linux 发行版,以便使用它的工具、实用程序和文件系统。多亏了这一点,我们将能够通过将存储库的副本移动到 linux 文件系统并对其进行处理来解决事件传播问题,但这一切都在 windows 操作系统中。

实现这一目标的步骤是:

  1. 从命令行安装 Ubuntu 发行版
    wsl --install -d Ubuntu

  2. 将 ubuntu 设置为 WSL2 的当前发行版

    wsl --set-version Ubuntu 2

  3. 在 docker 中应用 WSL 集成

    3.1 进入docker桌面->设置->资源->WSL集成->刷新

    3.2 激活 Ubuntu

    3.3 应用更改

  4. 从 Windows 资源管理器访问 ubuntu 文件系统\\wsl$\Ubuntu\并将存储库副本移动到其中。

  5. 安装 vscode Remote 的扩展 - WSL

  6. 通过远程 wsl 使用以下命令从新位置打开 vscode 中的工作目录:

    ctrl+shift+p-> 在 WSL 中打开文件夹

  7. 运行命令:

docker-compose up

所有这些信息都是从今天在空气包存储库中的未解决问题中获得的。


查看完整回答
反对 回复 2022-10-17
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

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



查看完整回答
反对 回复 2022-10-17
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

当您使用 wsl 在 Visual Studio 中打开文件夹时,问题将得到解决

在此处输入图像描述

可能会有所帮助: https ://code.visualstudio.com/docs/remote/wsl


查看完整回答
反对 回复 2022-10-17
  • 3 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信