【问题标题】:How to take arguments at run time in docker?如何在 docker 运行时接受参数?
【发布时间】:2017-05-24 06:46:08
【问题描述】:

我对 docker 很陌生,我不知道如何在运行时接受参数。我的代码如下所示:

package main

import (
"fmt"
//"flag"
"os"
"net/http"
"io/ioutil"
"reflect"
)

func main() {

var args string
//  flag.Parse()      
//   args := flag.Args()
fmt.Println("Enter the URL : ")
fmt.Scanf("%s ",&args)
fmt.Println(args)       
if len(args) < 1 {        
fmt.Println(reflect.TypeOf(args),"Please Enter the URL")  
os.Exit(1)                                
}
retrieve(args)        //call the retrieve function                                   

}

func retrieve(url string){          //gives the  source code as 
output.

resp, err := http.Get(url)         
if err != nil{
  fmt.Println("read error is:", err)
  return 
}
body, err := ioutil.ReadAll(resp.Body);
if err != nil{ 
  fmt.Println("read error is:", err)
  return 
} else{
  fmt.Println(string(body))

}
}


Dockerfile 如下所示:

FROM golang:1.7-alpine

ADD . /home

WORKDIR /home

CMD ["go","run","fetchSource.go"]

我已经注释了它不起作用的代码。我只想在运行时接受参数,以便我取消注释这些行。

【问题讨论】:

  • 请将您的代码粘贴到您的问题中。

标签: go dockerfile


【解决方案1】:

我已尝试在 Dockerfile 中进行以下更改,它也有效。

FROM golang:1.7-alpine

ADD . /home

WORKDIR /home
# This builds a binary first
RUN ["go", "build"]
# Now you can run the executable and pass arguments at the run time.
ENTRYPOINT ["./home"]

【讨论】:

    【解决方案2】:

    指定带有所有参数的完整命令,例如:

    docker run myimage:latest go run fetchSource.go arg1 arg2 arg3
    

    编辑:

    当您在 docker run 命令的末尾指定某些内容时,您将覆盖 Dockerfile 的“入口点”或“Cmd”部分。您必须指定完整的命令。

    【讨论】:

    • 谢谢,它有效,但你能说明为什么docker run -it myapp http://www.comshows:来自守护进程的错误响应:oci 运行时错误:container_linux.go:247:启动容器进程导致“exec:\”运行\“ : 在 $PATH" 中找不到可执行文件。
    猜你喜欢
    • 1970-01-01
    • 2011-08-15
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    相关资源
    最近更新 更多