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

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

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

http://img4.mukewang.com/634d3c130001dbbd06800418.jpg

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

http://img.mukewang.com/634d3c1e0001773b02170058.jpg

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"]

码头工人-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


泛舟湖上清波郎朗
浏览 162回答 3
3回答

手掌心

我看到这是一个老问题,但我最近遇到了这个问题,终于设法解决了。所以我把我的答案留在这里,以防它帮助其他用户。正如我在一些评论中所读到的,问题确实是由于 Air 使用事件通知 (fsnotify) 并且这不能在 windows 系统和 docker 容器之间正确传播。但是,这在 linux 上确实可以正常工作,因此我们目前可以选择的唯一解决方案如下:在 Windows 上安装 WSL2WSL2 允许我们在我们的 Windows 系统中安装 Linux 发行版,以便使用它的工具、实用程序和文件系统。多亏了这一点,我们将能够通过将存储库的副本移动到 linux 文件系统并对其进行处理来解决事件传播问题,但这一切都在 windows 操作系统中。实现这一目标的步骤是:从命令行安装 Ubuntu 发行版wsl --install -d Ubuntu将 ubuntu 设置为 WSL2 的当前发行版wsl --set-version Ubuntu 2在 docker 中应用 WSL 集成3.1 进入docker桌面->设置->资源->WSL集成->刷新3.2 激活 Ubuntu3.3 应用更改从 Windows 资源管理器访问 ubuntu 文件系统\\wsl$\Ubuntu\并将存储库副本移动到其中。安装 vscode Remote 的扩展 - WSL通过远程 wsl 使用以下命令从新位置打开 vscode 中的工作目录:ctrl+shift+p-> 在 WSL 中打开文件夹运行命令:docker-compose up所有这些信息都是从今天在空气包存储库中的未解决问题中获得的。

胡说叔叔

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

慕雪6442864

当您使用 wsl 在 Visual Studio 中打开文件夹时,问题将得到解决在此处输入图像描述可能会有所帮助: https ://code.visualstudio.com/docs/remote/wsl
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go