docker - 在 Docker 中设置 Go Glide

标签 docker go atom-editor development-environment glide-golang

我正在 docker 中使用 Go 和 Glide 构建一个应用程序。我还必须使用反射来自动触发编译。

我不知道如何让 Glide 与 docker 一起工作。

docker 文件

FROM golang:1.8.1-alpine

ENV GOBINARIES /go/bin
ENV BUILDPATH /code
ENV REFLEXURL=http://s3.amazonaws.com/wbm-raff/bin/reflex1.8a
ENV REFLEXSHA=19bdbbb68c869f85ee22a6b7fa9c73f8e5b46d0fe7a73df37e028555a6ba03e8

WORKDIR $GOBINARIES
RUN rm -rf /var/cache/apk/*
RUN wget -q "$REFLEXURL" -O reflex
RUN chmod +x /go/bin/reflex

ENV TOOLS /go/_tools

RUN mkdir -p $BUILDPATH
ENV PORT 5000
EXPOSE $PORT

RUN mkdir -p $TOOLS
ADD build.sh $TOOLS
ADD reflex.conf $TOOLS
RUN chown root $TOOLS/build.sh
RUN chmod +x $TOOLS/build.sh

WORKDIR $BUILDPATH
CMD ["reflex","-c","/go/_tools/reflex.conf"]

构建.sh

set -e
echo "[build.sh:building binary]"
cd $BUILDPATH
glide install -s -v
go build -o /servicebin && rm -rf /tmp/*
echo "[build.sh:launching binary]"
/servicebin

反射.conf

-sr '\.build$' -- sh -c '/go/_tools/build.sh'

docker-compose.yaml

version: '3'
services:
  logen:
    build:
      context: ./Docker
      dockerfile: Dockerfile
    ports:
    - "5000:5000"
    volumes:
    - .:/code

Atom on-save 插件配置文件

[
  {
    "srcDir": ".",
    "destDir": ".",
    "files": "**/*.go",
    "command": "echo $(date) - ${srcFile} > .build"
  }
]

主.go

package main

import (
    "io"
    "log"
    "net/http"
    "os"
  "github.com/astaxie/beego"
)

func hello(w http.ResponseWriter, r *http.Request) {
    io.WriteString(w, "Hello world!1")
}

func main() {
    log.SetOutput(os.Stdout)

    port := ":" + os.Getenv("PORT")
    http.HandleFunc("/", hello)

    log.Printf("\n Application is listening on %v\n", port)

    http.ListenAndServe(port, nil)
}

enter image description here

最佳答案

其实我并不需要在容器中安装Glide!只需将主机中的 vendor 文件夹反射(reflect)到 docker-compose.yml 中的 $GOPATH/src 即可。然后编译就可以了。

version: '3'
services:
  logen:
    build:
      context: ./Docker
      dockerfile: Dockerfile
    ports:
    - "5000:5000"
    volumes:
    - .:/code
    - ./vendor:/go/src

关于docker - 在 Docker 中设置 Go Glide,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43384509/

相关文章:

go - 两种 Gin 模式,调试和发布有什么区别?

javascript - 为什么在尝试使用 React 从另一个文件导入类时出现空白屏幕

python - 如何使用atom-ide-debugger-python来调试python代码,包括。变量监视和断点

regex - 在 Atom 包中,如何在语法中重叠模式?

docker - docker-compose drupal不接受我的数据库名称,并在下面抛出错误

docker - 从 GitLab CI 运行器连接到 docker-in-docker

生产环境中的 Windows 上的 Docker

javac : File Not Found Error in Dockerfile

mongodb - 如何在 golang mgo.v2 库中使用 MongoDB 获取聚合管道结果

reflection - 避免反射 - 我怎样才能最好地重构这段代码?