dockerbuild设去应用程序私人github

我试图从我的应用程序构build一个docker图像。 github回购是私人的。 我有一点新的去(和docker),但我认为通过glidepipe理的/vendor文件应该绕过这个问题? 另外为什么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 

我怎样才能解决这个问题? 谢谢

只有使用golang:1.8-onbuild如果你需要编译你的代码图像INSIDE容器。 这对CI构build通常很有用。 否则,避免,因为它是一个巨大的形象。

更快的解决scheme是在本地构buildGo应用程序(例如,开发环境),并将最终的Go应用程序复制到一个非常轻量级的容器中。

我会给你我们的标准过程。

  1. 如果您的本地计算机是Mac或Windows,则需要使用以下命令cross-compile您的Go代码: GOOS=liux GOARCH=amd64 go build -o myapp_linux-amd64linux-amd64只是一个约定,提醒自己该文件是为Linux编译,而不是Mac或Windows。

  2. 我们还将我们的Go应用程序部署到非常轻量级的Alpine linux容器。 Alpine现在是创build应用的标准Docker镜像。 这是非常小的和安全的,但它有一个主要的怪癖; 它使用的是musc而不是更常见的glibc作为底层的OS / IO库,所以我们需要更多的编译标志: -a -ldflags '-w -extldflags "-static"'

  3. 作为一个额外的,我们还使用以下命令删除了-gcflags=-trimpath=$(pwd) -asmflags=-trimpath=$(pwd)列出的文件名的path: -gcflags=-trimpath=$(pwd) -asmflags=-trimpath=$(pwd)

我们使用的编译命令是: 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

现在,您可以在开发环境中本地构build应用程序,并使用以下Dockerfile创build映像:

 FROM alpine:3.6 COPY ./myapp_linux-amd64 /usr/local/bin/myapp ENTRYPOINT [] CMD /usr/local/bin/myapp 

build立它使用:

go build -t myimagename:tag .

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

你可以试试这个吗? 它将拉下官方的高山形象,并引导你进入一个互动terminal。

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

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

 docker run -it golang:1.8-onbuild sh 

如果这样的话,问题可能是Dockerfile,而不是Docker或Go图像。

如果您想了解更多关于Docker和Go的信息 ,请查看官方存储库 。 我最近还写了关于Docker和Go以及如何快速启动和运行的信息。

如果你在你的项目/包的根目录下有/vendor ,它不应该从网上获取任何东西。 以下是我的做法: https : //gist.github.com/orvyl/7000f973abe88d40c8c91d4e28e139a7