使用 golang 在 docker 中热重载不起作用(github.com/cosmtrek/air)
Posted
技术标签:
【中文标题】使用 golang 在 docker 中热重载不起作用(github.com/cosmtrek/air)【英文标题】:Hot Reload not working in docker with golang (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 上,怀疑这与文件系统有关,嗯.. 【参考方案1】:只需通过命令docker-compose up -d --build
重建容器
【讨论】:
如果我更改代码,它将无法工作(未重建)。状态只是运行,但不响应代码更改。以上是关于使用 golang 在 docker 中热重载不起作用(github.com/cosmtrek/air)的主要内容,如果未能解决你的问题,请参考以下文章
热重载不起作用,但在 Android Studio 中热重启有效
使用 Webpack Dev Middleware 在 Webpack 中热重载 CSS 文件的最简单方法