2017-09-27 39 views
0

我有一個非常簡單的應用程序。下面是代碼:無法在Docker-machine(虛擬Box)上運行Docker鏡像的Go(lang)應用程序

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] 
} 

據本地測試,並且,還我試着在我的機器(Ubuntu的)上運行它泊塢窗容器,它是完美的工作。但我想在虛擬機上運行它(我使用Oracle Virtual Box)。

所以,我已經安裝了泊塢窗機:

泊塢窗機版本0.12.2,構建9371605

在那之後,我已經切換到它,就像是在推薦official documentation這樣的:

的eval 「$(泊塢窗機ENV默認)」

所以我現在可以從該機器的角度來做。

而且我試圖運行從文檔例如ngnix

搬運工運行-d -p 8000:80 nginx的

捲曲$(泊塢窗機IP默認):8000

而我得到的結果,我可以通過訪問可以通過命令來訪問我的泊塢窗機的ip地址去ngnix歡迎頁面

泊塢窗機IP默認

但是當我嘗試運行我自己的碼頭工人的形象,我不能這樣做。當我試圖訪問它,我得到:

捲曲$(泊塢窗機IP默認):8080

捲曲:(7)無法連接到192.168.99.100端口8080:連接被拒絕

此外,我試圖跳過一個端口,添加協議(http,甚至https爲了運氣) - 沒有任何工作。

也許,我的Dockerfile有問題?

# Go experiments with cookies 
FROM golang:1.8-onbuild 
MAINTAINER [email protected] 

請問您能幫我嗎?

+1

什麼是'Dockerfile'是什麼樣子?這兩條線都在裏面嗎? – Carpetsmoker

+0

是的,先生!這一切,它在我的本地環境中完美運行 – SanchelliosProg

+0

你的docker run命令是怎麼樣的?您是否正確映射端口? – tanyehzheng

回答

1

此命令映射端口8080從泊塢窗主機的容器的80端口:

搬運工運行-d -p 8080:80 cookie的應用

此指令告訴你去申請爲監聽端口8080,容器內:

http.ListenAndServe( 「:8080」,無)

您在上述行中有一個端口不匹配,您的應用程序不在您要轉發的端口上偵聽。

要連接到您的容器的端口8080,您可以運行以下命令:

docker run -d -p 8080:8080 cookie-app 
相關問題