2015-04-15 21 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"] 
相关问题