【发布时间】:2020-09-18 21:15:15
【问题描述】:
希望你们一切都好!
我读了很多关于这个问题的文章,但没有找到适合我的东西..
解释上下文: 我正在用 go 制作一个 rest api,但这里显示的代码是假代码,以提高可读性。 我将 docker 与 docker-compose 一起使用,他们构建了一个 dockerfile,该 dockerfile 是 CMD 一个 makefile,我对 dev env 的反射有问题。反射启动,但更改后不重新加载。 我可能错过了一些东西,我是 Go 和 Docker 的新手 :)
确定代码时间:
我的 docker-compose.yaml:
version: "3"
services:
app:
build: .
ports:
- "80:8000"
volumes:
- appsrc:/app
environment:
CODE_ENV: dev
networks:
- apbp-network
networks:
apbp-network:
driver: bridge
volumes:
appsrc:
谁调用了我的 Dockerfile:
FROM golang:latest
WORKDIR /app
COPY . .
RUN make --no-print-directory install
CMD make --no-print-directory run
谁调用了我的 Makefile
GO_PROJECT_NAME := test
go_prep_build:
@echo "\n....Preparing installation environment for $(GO_PROJECT_NAME)...."
go get github.com/cespare/reflex
go_dep_install:
@echo "\n....Installing dependencies for $(GO_PROJECT_NAME)...."
go mod download
go_build:
@echo "\n....Building $(GO_PROJECT_NAME)...."
go build -o test ./cmd/test
go_run:
@echo "\n....Running $(GO_PROJECT_NAME)...."
./test
# Project rules
install:
$(MAKE) go_prep_build
$(MAKE) go_dep_install
$(MAKE) go_build
run:
reflex --start-service -r '\.go$$' make restart
restart:
@$(MAKE) go_build
@$(MAKE) go_run
.PHONY: go_prep_build go_dep_install go_build go_run install run restart reflex
我的 ./cmd/test 文件:
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "hello world")
})
http.ListenAndServe(":8000", nil)
}
一切正常,只是我的 reflex 命令在更改后没有重新加载,例如将 hello world 更改为 hello world 2 不会重建。
我的输出:
app_1 | reflex --start-service -r '\.go$' make restart
app_1 | [00] Starting service
app_1 | [00]
app_1 | [00] ....Building apbp....
app_1 | [00] go build -o test ./cmd/test
app_1 | [00]
app_1 | [00] ....Running apbp....
app_1 | [00] ./test
我真的坚持下去了
感谢阅读,如果您需要更多信息,请咨询我:)
【问题讨论】:
-
您可能会发现使用实际的本地开发环境比尝试说服 Docker 模拟一个更容易。让你的 Dockerfile
RUN make install,然后让它的默认命令是启动构建的应用程序CMD ./test,并从 Dockerfile 中删除volumes:。 -
嗨,大卫,感谢您的宝贵时间!对不起,但我不明白你想解释什么。我的代码比我的真实代码更简单,我有多个容器和多个构建,以便像迁移等一样运行。但是是的,没有码头工人的反射工作。你能解释一下你想说什么吗?对不起,我真的很陌生
-
查看这个 repo github.com/acim/go-reflex 并检查他们的重启命令。是
-sr '\.go$' -- /usr/local/bin/build.sh -
感谢 mh-cbon,但我已经读过了。
-sr '\.go$' -- /usr/local/bin/build.sh/usr/local/bin/build.sh 部分只是当反射看到变化时运行的命令。但在我的情况下,反射没有看到变化,我的命令只是一个 makefile 命令。也许我错了,这只是我阅读文档的方式.. -
只是一个鼓励你的评论:我只使用本地 Docker 开发环境(安装属于 90 年代的东西!)我在添加 Go API 时遇到问题,你的问题/答案为我解决了这个问题.谢谢。
标签: docker go makefile docker-compose dockerfile