我目前的开发设置是一个docker文件,它在每次使用CompileDaemon进行保存时编译代码,并使用Delve进行调试。
目前我几乎可以让所有的东西都工作。唯一的问题是当我再次尝试启动调试时,端口已经在使用中了。
在docker容器中使用debug来完成live reload是否是一种更好的方法?
Dockerfile:
FROM golang:latest
RUN go get github.com/githubnemo/CompileDaemon && \
go get github.com/go-delve/delve/cmd/dlv
WORKDIR /app
COPY go.* ./
RUN go mod download
COPY ./ ./
EXPOSE 5000 2345
# echo 1 is to block build command
ENTRYPOINT CompileDaemon --build="echo 1" --command="dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient cmd/app/main.go"
字符串
1条答案
按热度按时间5lhxktic1#
如果你在PudeDaemon中使用了callfulkill和stop命令,这是可行的,因为我希望我的应用程序的子进程被dlv杀死,而在内部,PudeDaemon使用os.process.Kill(),它不会杀死整个进程树,只是dlv一个。如果只有dlv被杀死,go进程仍然会运行,所以新的dlv不能在同一个端口上启动同一个进程,这会导致像
[GIN-debug] [ERROR] listen tcp :5100: bind: address already in use
这样的错误。为了确保go进程被杀死,对我有效的完整命令是:
字符串