我有一個簡單的dockerized golang程序,我希望能夠在運行容器時向它發送命令行選項。如何將命令行選項傳遞給我的dockerized GoLang程序?
我Dockerfile看起來是這樣的:
FROM golang:onbuild
RUN go get [MY PROGRAM]
我有一個簡單的dockerized golang程序,我希望能夠在運行容器時向它發送命令行選項。如何將命令行選項傳遞給我的dockerized GoLang程序?
我Dockerfile看起來是這樣的:
FROM golang:onbuild
RUN go get [MY PROGRAM]
現在你只得到你的源代碼運行的容器中,然後退出。 一旦你建立了它或運行一個你將調用你的程序的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將是直接執行的命令。
添加以下行應該工作: ENTRYPOINT ["go", "run", "yourapp"]
,請參閱Docker Doc和Go commandline example。
然後,您只需在docker運行調用結束時爲您的go程序放置參數,例如docker run mygoapp arg1 arg2
。然後應該將參數傳遞給你的程序。
如果我這樣做,我不能將它鏈接到另一個Redis容器。我希望我的應用程序連接到默認端口上的Redis容器。我怎樣才能做到這一點? – Donovan
只要您的應用按照Go慣例編譯爲單個二進制文件,您應該可以在下面使用此簡單的兩行代碼,在ENTRYPOINT
指令中傳遞任何後續標誌作爲類似數組的參數。
FROM golang:onbuild
ENTRYPOINT ["/go/bin/app", "-name=foo", "-title=bar"]
你怎麼運行容器,你*不能*傳遞你想要的參數? – JimB