不能在docker-machine上运行Docker镜像的Go(lang)应用程序(Virtual Box)

我有一个非常简单的应用程序。 这里是代码:

package main import ( "fmt" "math/rand" "time" "net/http" "encoding/base64" "encoding/json" ) type Message struct { Text string `json:"text"` } var cookieQuotes = []string{ // Skipped all the stuff } const COOKIE_NAME = "your_cookie" func main() { http.HandleFunc("/set_cookie", setCookie) http.HandleFunc("/get_cookie", getCookie) http.Handle("/favicon.ico", http.NotFoundHandler()) http.ListenAndServe(":8080", nil) } func setCookie(w http.ResponseWriter, r *http.Request) { quote := getRandomCookieQuote() encQuote := base64.StdEncoding.EncodeToString([]byte(quote)) http.SetCookie(w, &http.Cookie{ Name: COOKIE_NAME, Value: encQuote, }) } func getCookie(w http.ResponseWriter, r *http.Request) { cookie, err := r.Cookie(COOKIE_NAME) if err != nil { fmt.Fprintln(w, "Cannot get the cookie") } message, _ := base64.StdEncoding.DecodeString(cookie.Value) msg := Message{Text:string(message)} fmt.Println(msg.Text) respBody, err := json.Marshal(msg) fmt.Println(string(respBody)) if err != nil { fmt.Println("Cannot marshall JSON") } w.Header().Set("Content-Type", "application/json") fmt.Fprintln(w, string(respBody)) } func getRandomCookieQuote() string { source := rand.NewSource(time.Now().UnixNano()) random := rand.New(source) i := random.Intn(len(cookieQuotes)) return cookieQuotes[i] } 

它在本地进行了testing,而且我也尝试在我的机器上运行Docker容器(Ubuntu),并且工作正常。 但我想在虚拟机上运行它(我使用的是Oracle Virtual Box)。

所以,我已经安装了docker-machine:

docker机版本0.12.2,版本9371605

之后,我转向它,就像这样的官方文档中推荐的那样:

eval“$(docker-machine env default)”

所以我现在可以从该机器的angular度来做。

另外我试图从文档示例中运行ngnix

docker运行-d -p 8000:80 nginx

curl $(docker-machine ip default):8000

我得到的结果,我可以通过访问我的docker机IP地址,可以通过命令访问ngnix欢迎页面

docker机器的IP默认

但是当我尝试运行我自己的docker图像时,我无法做到这一点。 当我尝试访问它时,我得到:

curl $(docker-machine ip default):8080

curl:(7)无法连接到192.168.99.100端口8080:连接被拒绝

此外,我试图跳过一个端口,添加协议(http,甚至https为了运气) – 没有任何工作。

也许,我的Dockerfile有问题?

 # Go experiments with cookies FROM golang:1.8-onbuild MAINTAINER vasyania2@gmail.com 

请问你能帮帮我吗?

此命令将端口8080从您的docker主机映射到您的容器的端口80:

docker运行-d -p 8080:80 cookie-app

该指令会告诉您的应用程序在容器内的端口8080上进行监听:

http.ListenAndServe(“:8080”,零)

您在上述行中有一个端口不匹配,您的应用程序不在您正在转发的端口上进行侦听。

要连接到您的容器的端口8080,您可以运行以下:

 docker run -d -p 8080:8080 cookie-app