草庐IT

docker - 无法从docker-machine(Virtual Box)上的docker图像运行Go(lang)应用程序

coder 2024-07-07 原文

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

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-machine:

docker-machine version 0.12.2, build 9371605

在那之后,我切换到它,就像 official documentation 中推荐的那样像这样:

eval "$(docker-machine env default)"

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

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

docker run -d -p 8000:80 nginx

curl $(docker-machine ip default):8000

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

docker-machine ip default

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

curl $(docker-machine ip default):8080

curl: (7) Failed to connect to 192.168.99.100 port 8080: Connection refused

我也试过跳过一个端口,添加协议(protocol)(http,为了运气甚至是 https)——没有任何效果。

也许,我的 Dockerfile 有问题?

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

你能帮帮我吗?

最佳答案

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

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

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

http.ListenAndServe(":8080", nil)

您在上述行中的端口不匹配,您的应用程序未在您转发到的端口上监听。

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

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

关于docker - 无法从docker-machine(Virtual Box)上的docker图像运行Go(lang)应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46441235/

有关docker - 无法从docker-machine(Virtual Box)上的docker图像运行Go(lang)应用程序的更多相关文章

  1. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  2. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  3. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  4. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  5. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  6. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  7. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  8. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  9. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  10. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

随机推荐