docker build go app private github

时间:2017-12-02 17:48:00

标签: docker go jenkins kubernetes

我正试图从我的go应用中构建一个泊坞窗图片。 github回购是私有的。我有点新手(和docker),但我认为通过/vendor管理的glide文件可以解决这个问题?为什么docker必须从github获得一切?一切都在当地可用。

命令:

docker build -t testimage .

Dockerfile

FROM golang:1.8-onbuild

在步骤

失败
exec go get -v -d
....... 
fatal: could not read Username for 'https://github.com': No such device or address

我该如何解决这个问题? THX

3 个答案:

答案 0 :(得分:0)

如果您需要在容器内编译转码图像,请仅使用golang:1.8-onbuild。这通常对CI构建有用。否则请避免,因为它是一个巨大的图像。

更快的解决方案是在本地构建Go应用程序(例如dev env)并将最终的Go应用程序复制到一个非常轻量级的容器中。

我将为您提供标准流程。

  1. 如果您的本地计算机是Mac或Windows,则需要使用cross-compile GOOS=liux GOARCH=amd64 go build -o myapp_linux-amd64针对Linux的Go代码。linux-amd64-a -ldflags '-w -extldflags "-static"'只是一个提醒自己该文件是为linux而不是mac或windows编译的约定。

  2. 我们还将Go应用程序部署到非常轻量级的Alpine linux容器中。 Alpine现在是创建应用程序的标准Docker镜像。它非常小而且安全,但它有一个主要的怪癖;它使用musc而不是更常见的glibc作为底层OS / IO库,因此我们需要更多的编译标志:-gcflags=-trimpath=$(pwd) -asmflags=-trimpath=$(pwd)

  3. 作为额外内容,我们还使用以下内容删除了堆栈跟踪中列出的文件名中开发人员自己的路径: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GOROOT_FINAL=$(pwd) go build -a -ldflags '-w -extldflags "-static"' -gcflags=-trimpath=$(pwd) -asmflags=-trimpath=$(pwd) -o myapp_linux-amd64

  4. 我们使用的结果编译命令是: FROM alpine:3.6 COPY ./myapp_linux-amd64 /usr/local/bin/myapp ENTRYPOINT [] CMD /usr/local/bin/myapp

    您现在可以在dev env上本地构建应用程序,并使用以下Dockerfile创建映像:

    docker build -t myimagename:tag .

    使用以下方式构建它:

    {% for category in categories %} <li> <div class="li"><a href="{{ path('accessories_list', { 'category' : category.url }) }}">{{ category.name|trans({}, 'categories')|raw }}</a></div> {% if category.children is not empty %} <ul> {% include "default/_menu_links.html.twig" with {'categories':category.children} only %} </ul> {% endif %} </li> {% endfor %}

答案 1 :(得分:0)

除了FROM之外,Dockerfile中还有其他什么吗?你用什么docker命令打开容器?如果您只是尝试构建一个docker镜像并且失败了,除非在Dockerfile中定义,否则不应该与github进行任何交互或授权。

你可以试试这个吗?它将下拉官方的Go Alpine图像并引导您进入交互式终端。

docker run -it golang:1.9.2-alpine3.6 sh

或者你也可以使用你的形象。

docker run -it golang:1.8-onbuild sh

如果可行,问题可能在于Dockerfile而不是Docker或Go图像。

如果您想了解更多有关Docker和Go的信息,请查看official repository。我最近还写了关于Docker and Go以及如何快速启动和运行它的文章。

答案 2 :(得分:0)

如果项目/包的根目录中有/vendor,则不应从互联网上提取任何内容。以下是我的做法:https://gist.github.com/orvyl/7000f973abe88d40c8c91d4e28e139a7