我正在尝试从我的 go 应用构建一个 docker 镜像。 github 存储库是私有(private)的。我有点新手(和 docker),但我认为通过 glide 管理的 /vendor 文件应该可以解决这个问题?还有为什么 docker 必须从 github 获取所有东西?一切都在本地可用。
命令:
docker build -t testimage .
docker 文件
FROM golang:1.8-onbuild
在这一步失败了
exec go get -v -d
.......
fatal: could not read Username for 'https://github.com': No such device or address
我该如何解决这个问题?谢谢
最佳答案
如果您需要在容器内编译 go 代码镜像,请仅使用 golang:1.8-onbuild。这通常对 CI 构建很有用。否则请避免,因为它是一个巨大的图像。
一个快得多的解决方案是在本地构建您的 Go 应用程序(例如 dev env)并将最终的 Go 应用程序复制到一个非常轻量级的容器中。
我会给你我们的标准流程。
如果您的本地计算机是 Mac 或 Windows,您需要使用以下命令交叉编译 Linux 的 Go 代码:GOOS=liux GOARCH=amd64 go build -o myapp_linux -amd64。 linux-amd64 只是一个约定,提醒您该文件是为 linux 而不是 mac 或 windows 编译的。
我们还将我们的 Go 应用程序部署到非常轻量级的 Alpine linux 容器中。 Alpine 现在是创建应用程序的标准 Docker 镜像。它非常小而且安全,但它有一个主要的怪癖;它使用 musc 而不是更常见的 glibc 作为底层 OS/IO 库,因此我们需要更多的编译标志:-a -ldflags '-w -extldflags "-static"'
此外,我们还删除了堆栈跟踪中列出的文件名中开发人员自己的路径,使用:-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
您现在可以在您的开发环境中本地构建您的应用,并使用以下 Dockerfile 创建镜像:
FROM alpine:3.6
COPY ./myapp_linux-amd64 /usr/local/bin/myapp
ENTRYPOINT []
CMD /usr/local/bin/myapp
构建它使用:
docker build -t myimagename:tag .
关于docker build go app 私有(private) github,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47610730/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案
在ruby中,你可以这样做:classThingpublicdeff1puts"f1"endprivatedeff2puts"f2"endpublicdeff3puts"f3"endprivatedeff4puts"f4"endend现在f1和f3是公共(public)的,f2和f4是私有(private)的。内部发生了什么,允许您调用一个类方法,然后更改方法定义?我怎样才能实现相同的功能(表面上是创建我自己的java之类的注释)例如...classThingfundeff1puts"hey"endnotfundeff2puts"hey"endendfun和notfun将更改以下函数定
我正在尝试获得良好的Ruby编码风格。为防止意外调用具有相同名称的局部变量,我总是在适当的地方使用self.。但是现在我偶然发现了这个:classMyClass上面的代码导致错误privatemethodsanitize_namecalled但是当删除self.并仅使用sanitize_name时,它会起作用。这是为什么? 最佳答案 发生这种情况是因为无法使用显式接收器调用私有(private)方法,并且说self.sanitize_name是显式指定应该接收sanitize_name的对象(self),而不是依赖于隐式接收器(也是
我使用Jekyll运行博客,并认为我会解决RedcarpetMarkdown解释器,因为它是developedandusedbyGitHub.好吧,我只是碰巧遇到了一个错误,去检查问题,然后foundthis.Maintainersays,"Asyouprobablyhavenoticed(harharharhar)Idon'thavetimetomaintainRedcarpetanymore.It'snotapriorityforme(IfindMarkdownthoroughlyboring)andit'snotapriorityforGitHub,becausewenolong
我们正在使用Vagrant进行部署,我们最终希望将此集群部署在Rackspace上。vagrant-rackspace插件是一个自然的选择,但它有一些错误,这些错误未包含在最新的0.1.1版本中(notablythatvagrantprovisiondoesn'twork)。我已经在我的personalfork中解决了这个问题通过合并其他人的工作来对存储库进行改造。是否可以从github安装vagrant插件?显而易见的事情没有奏效:[unix]$vagrantplugininstallvagrant-rackspace--plugin-sourcehttps://github.com
在Ruby类定义中,private关键字在以下场景中的作用域是什么:classFoodefbar_publicputs"public"endprivatedefbar_privateputs"private"enddefbar_public_2puts"anotherpublic"endendprivate是否只作用于bar_private?还是在bar_public_2上? 最佳答案 在您的例子中,bar_private和bar_public_2都是私有(private)的。那是因为这两种方法都在private关键字的“范围内”。
来自Java,我正在尝试在Ruby中实现LinkedList。我在Java中实现它的通常方法是有一个名为LinkedList的类和一个名为Node的私有(private)内部类,其中LinkedList的每个对象都作为Node对象。classLinkedListprivateclassNodeattr_accessor:val,:nextendend我不想将Node类暴露给外部世界。然而,通过Ruby中的这个设置,我可以使用这个访问LinkedList类之外的私有(private)Node类对象-node=LinkedList::Node.new我知道,在Ruby1.9中,我们可以使用
我有一个使用Jekyll托管在GitHub上的静态网站。问题是,我真的不需要master分支,因为存储库唯一包含的是网站。这样我就必须gitcheckoutgh-pages,然后gitmergemaster,然后gitpushorigingh-pages。有什么简单的方法可以摆脱gh-pages分支并直接从master推送? 最佳答案 Theproblemis,Idon'treallyneedthemasterbranch,astheonlythingtherepositorycontainsisthewebsite.Isthere