我有一个简单的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