Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从docker计算机(虚拟箱)上的docker映像运行Go(lang)应用程序_Docker_Go_Docker Machine - Fatal编程技术网

无法从docker计算机(虚拟箱)上的docker映像运行Go(lang)应用程序

无法从docker计算机(虚拟箱)上的docker映像运行Go(lang)应用程序,docker,go,docker-machine,Docker,Go,Docker Machine,我有一个非常简单的应用程序。代码如下: package main import ( "fmt" "math/rand" "time" "net/http" "encoding/base64" "encoding/json" ) type Message struct { Text string `json:"

我有一个非常简单的应用程序。代码如下:

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上运行一个docker容器,它工作得非常好。但我想在虚拟机上运行它,我使用的是Oracle Virtual Box

因此,我安装了docker机器:

docker机器版本0.12.2,内部版本9371605

在那之后,我切换到了它,就像在下面的例子中推荐的那样:

评估$docker机器环境默认值

所以我现在可以从这台机器的角度来做

我还尝试从文档示例运行ngnix:

docker run-d-p 8000:80 nginx

curl$docker机器ip默认值:8000

我得到的结果是,我可以通过访问我的docker机器ip地址进入ngnix欢迎页面,该ip地址可以通过以下命令访问:

docker机器ip默认值

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

curl$docker机器ip默认值:8080

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

此外,我还尝试跳过一个端口,添加协议http,甚至为了运气而添加https——什么都不起作用

也许我的Dockerfile有问题

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

您能帮助我吗?

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

docker run-d-p 8080:80 cookie应用程序

此指令告诉您的go应用程序在容器内的端口8080上侦听:

http.listendserve:8080,无

如果上面几行中的端口不匹配,则应用程序未侦听要转发到的端口

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

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

Dockerfile看起来像什么?这两条线都在里面吗?是的,先生!仅此而已,它在我的本地环境中运行得非常好docker run命令看起来如何?您正确映射端口了吗?它就像:docker run-d-p8080:80 docker ps的cookie appAdd输出