无法从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输出