2015-04-15 52 views

回答

1

現在你只得到你的源代碼運行的容器中,然後退出。 一旦你建立了它或運行一個你將調用你的程序的shell,你需要用你想要的參數實際運行你的程序。 我希望我提供的這個Dockerfile可以作爲指導。

我在本地有一個導出GOPATH GOBIN和PATH的bashrc,或者您可以在dockerfile中使用ENV語句。我通常也檢查了 我的程序的工作副本,我正在構建映像,並將其複製到容器中。這個設置只是爲了給你解決未來問題的想法。

export GOPATH="/root/go" 
export GOBIN="/root/go/bin" 
export PATH="/root/go/bin:$PATH" 

然後我Dockerfile是

FROM ubuntu:14.04 
MAINTAINER foo, [email protected] 
COPY bashrc /root/.bashrc 
COPY MYPROGRAM /root/go/src/MYPROGRAM 
ENV GOBIN /root/go/bin 
ENV GOPATH /root/go 
ENV PATH /root/go/bin:$PATH 
ENV HOME /root 
WORKDIR /root 
RUN \ 
    apt-get update && \ 
    apt-get install -y golang git && \ 
    mkdir -p /root/go/src && \ 
    mkdir -p /root/go/bin && \ 
    go get DEPENDENCIES 

RUN go install /root/go/src/MYPROGRAM/program.go 
ENTRYPOINT ["program"] 

現在,容器的進入點在你的程序,你可以

docker run img args-to-your-prog 

,你也可以在ARGS添加到入口點聲明類似

ENTRYPOINT["program", "arg1", ...] 

或者你可以使用bash作爲切入點,讓你的程序作爲參數

docker run img program arg1 ... 

入口點是正在執行的程序,如果它被設置CMD將 傳遞給它的ARGS。 CMD是容器的默認參數。如果 ENTRYPOINT沒有設置,CMD將是直接執行的命令。

0

添加以下行應該工作: ENTRYPOINT ["go", "run", "yourapp"],請參閱Docker DocGo commandline example

然後,您只需在docker運行調用結束時爲您的go程序放置參數,例如docker run mygoapp arg1 arg2。然後應該將參數傳遞給你的程序。

+0

如果我這樣做,我不能將它鏈接到另一個Redis容器。我希望我的應用程序連接到默認端口上的Redis容器。我怎樣才能做到這一點? – Donovan

0

只要您的應用按照Go慣例編譯爲單個二進制文件,您應該可以在下面使用此簡單的兩行代碼,在ENTRYPOINT指令中傳遞任何後續標誌作爲類似數組的參數。

FROM golang:onbuild 
ENTRYPOINT ["/go/bin/app", "-name=foo", "-title=bar"] 
相關問題