首页 > 解决方案 > 设置 docker-compose 以观察多包 golang 项目的变化

问题描述

我正在为我的 go 应用程序使用标准结构。

它是这样构建的:

cmd
  app
    main.go
internal
  app
    server.go
  pkg
    users
      ...
pkg
  dependency
    ...
web
  app
    ...
docker-compose.yml
Dockerfile

然而问题在于,使用这种结构很难安装和构建应用程序依赖项。例如,我使用了诸如fresh之类的文件观察器,它只观察一个目录并运行一个特定的文件。如果我更新 say pkg/dependency,它将看不到这些更改。

docker-compose 看起来像:

version: "3.1"

services:
  core:
    build: .
    depends_on:
      - mongo
      - memcached
    ports:
      - 8080:8080
    environment:
      APP_ENV: dev
    volumes:
      - .:/go/src/github.com/me/app
  mongo:
    image: mongo
    ports:
      - 27017:27017
  memcached:
    image: memcached
    ports:
      - 11211:11211

Dockerfile:

FROM golang:1.10.0

WORKDIR /go/src/github.com/me/app

COPY . .

RUN go get -u github.com/golang/dep/cmd/dep
RUN dep ensure

WORKDIR /go/src/github.com/me/app/cmd/app/
RUN go install
RUN go get github.com/pilu/fresh

CMD ["fresh"]

有什么帮助吗?

标签: dockergo

解决方案


我会推回那个fresh回购并问他们

如果您的文件更改被保存到 git,那么您可以设置一个像 https://github.com/adnanh/webhook 这样的 webhook 来监听这些git push操作以触发您的重建

但是,如果它们只是编辑,那么您可以使用类似

https://github.com/hpcloud/tail

tail -f在我发现可以很好地工作的任意文件/目录集上执行与 a 等效的功能(我的日志触发解析守护程序以进行错误检查)

但你是对的,考虑到你的用例,可能有更简单的方法


推荐阅读