2017-04-13 13 views
0

私は、ドッキングでGoとGlideを使用してアプリを構築しています。私はまた、自動的にコンパイルをトリガするために反射を使用する必要があります。DockerでGo Glideを設定する

グライドをドッカーで動作させる方法を理解できません。

Dockerfile

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"] 

build.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 

reflex.conf

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

ドッカー-compose.yaml

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

アトム設定ファイル

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

main.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

+0

... – har07

+0

私は私のDockerfileがフォルダ内にある – benoitcn

+0

の下にあなたを答えました。おそらく、ドッカーのシェルが外部のファイルに到達できないのでしょうか? glide.lockとglide.yamlのように? – benoitcn

答えて

0

プラグインセーブオン実は、私はコンテナにグライドをインストールする必要はありません! docker-compose.ymlの$ GOPATH/srcにホストマシンのベンダフォルダを反映させるだけです。コンパイルはOKになります。あなたのdockerfileでbuild.shを実行する前に、グライドをインストールするコマンドを追加する必要が

version: '3' 
services: 
    logen: 
    build: 
     context: ./Docker 
     dockerfile: Dockerfile 
    ports: 
    - "5000:5000" 
    volumes: 
    - .:/code 
    - ./vendor:/go/src 
関連する問題