Go & Docker:我可以在使用 stdlib 时运行 Go Web 服务器,当我使用自定义包时会出现错误

Posted

技术标签:

【中文标题】Go & Docker:我可以在使用 stdlib 时运行 Go Web 服务器,当我使用自定义包时会出现错误【英文标题】:Go & Docker: I'm able to run a go web server when using stdlib, when I use custom packages errors occur 【发布时间】:2015-11-07 06:56:32 【问题描述】:

请注意,当我在笔记本电脑上运行代码时,代码运行良好。

以下两组代码将在我的笔记本电脑上运行。但是,第二组(使用我的自定义包)在运行 docker 的 Elastic Beanstalk 上不起作用。

仅限标准库

import (
    "net/http"
    "os"
)

func main() 
    port := os.Getenv("PORT")
    if port == "" 
        port = "3000"
    
    http.ListenAndServe(":"+port, nil)

使用自定义包

import (
    "os"

    "github.com/sim/handlers"
)

func main() 
    port := os.Getenv("PORT")
    if port == "" 
        port = "3000"
    
    handlers.ServeAndHandle(port) // wrapper of ListenAndServe

错误信息

Failed to build Docker image aws_beanstalk/staging-app: andlers: exit status 128 [0mtime="2015-08-14T05:08:17Z" level="info" msg="The command [/bin/sh -c go-wrapper download] returned a non-zero code: 1" . Check snapshot logs for details.

2015-08-14 01:08:15 UTC-0400    WARN    Failed to build Docker image aws_beanstalk/staging-app, retrying...

cron.yaml

version: 1
cron: 
  - name: "task1"
    url: "/scheduled"
    schedule: "* * * * *"

【问题讨论】:

你用 docker 在你的机器上试过了吗?可能只是包的一些依赖项,它存在于您的机器上,但在您在弹性 beantalk 中使用的 docker 映像中缺失。 你也可以发布你的 Dockerfile 吗? @ydaetskcoR 我没有 dockerfile。我认为 Elastic beanstalk 会为您服务。也许我应该创建一个。 【参考方案1】:

根据documentation,您的环境需要Dockerfile 或/和Dockerrun.aws.json

Dockerfile

FROM FROM golang:1.3-onbuild

EXPOSE 3000

CMD ["go run <your.go.file>"]

Dockerrun.aws.json


  "AWSEBDockerrunVersion": "1",
  "Image": 
    "Name": "golang:1.3-onbuild",   # <-- don't need this if you are using a Dockerfile
    "Update": "true"
  ,
  "Ports": [
    
      "ContainerPort": "3000"
    
  ],
  "Logging": "/var/log/go"

使用eb命令行部署?

【讨论】:

以上是关于Go & Docker:我可以在使用 stdlib 时运行 Go Web 服务器,当我使用自定义包时会出现错误的主要内容,如果未能解决你的问题,请参考以下文章

黑马一初始Docker & Docker命令

黑马一初始Docker & Docker命令

Docker traefikV2.1

ST3使用

Docker——简介 & 安装 & 底层原理

Docker——简介 & 安装 & 底层原理