为了账号安全,请及时绑定邮箱和手机立即绑定

在 Docker for Go 程序中构建 Docker

在 Docker for Go 程序中构建 Docker

Go
婷婷同学_ 2021-10-04 18:05:34
我正在尝试为 Go 程序构建一个非常小的 Docker 容器。为此,我希望使用 Docker 容器来构建 Go 程序,然后(在容器内)构建另一个 Docker 容器来运行该程序。这是我的构建 Dockerfile:FROM google/golangWORKDIR /gopath/src/mycompany/mygoprog# Build the Contributors applicationRUN mkdir -p /gopath/src/mycompany/mygoprogADD ./src/* /gopath/src/mycompany/mygoprog/RUN CGO_ENABLED=0 GOOS=linux go build -a -tags rs -ldflags '-w' /gopath/src/mycompany/mygoprog/*.goRUN cp mygoprog /mygoprogCMD docker build -t foobar /gopath/src/mycompany/mygoprog我的源目录有我的 Go 程序(简单的——编译/运行)和这个用于最终产品的 Dockerfile:FROM scratchADD /mygoprog mygoprogENTRYPOINT ["/mygoprog"]EXPOSE 9100这些文件是这样组织的:/myproject   Dockerfile   /src      Dockerfile      mygoprog.go要启动构建,我转到顶级目录并运行:docker build .这运行没有错误......并且没有最终图像!输出如下所示:bash-3.2$ docker build .Sending build context to Docker daemon 6.656 kBSending build context to Docker daemon Step 0 : FROM google/golang ---> 3cc1d7ae0e9cStep 1 : WORKDIR /gopath/src/mycompany/mygoprog ---> Using cache ---> 49b9686dcbedStep 2 : RUN mkdir -p /gopath/src/mycompany/mygoprog ---> Using cache ---> 0d0139bb8caeStep 3 : ADD ./src/* /gopath/src/mycompany/mygoprog/ ---> 964ea5ca6afbRemoving intermediate container e57719a417d5Step 4 : RUN CGO_ENABLED=0 GOOS=linux go build -a -tags rs -ldflags '-w' /gopath/src/mycompany/mygoprog/*.go ---> Running in 608ad65db52c ---> 6e91f06b7654Removing intermediate container 608ad65db52cStep 5 : RUN cp mygoprog /mygoprog ---> Running in 196af3db881b ---> 5e90e11ffc7dRemoving intermediate container 196af3db881bStep 6 : CMD docker build -t foobar /gopath/src/mycompany/mygoprog ---> Running in 4794354abf2b ---> d91a908ee663Removing intermediate container 4794354abf2bSuccessfully built d91a908ee663我错过了什么,所以我得到了一个最终的、可运行的 Docker,里面有我编译的程序?
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

您已经生成了 docker 映像,但由于您没有为其指定标签,因此只能通过哈希 (d91a908ee663) 访问它。最好指定标签:docker build -t mygoprog .如果您尝试在没有其他设置的情况下运行您的图像,它将失败,因为其中没有 docker。最简单的解决方案是从容器访问您的 docker 守护进程:

docker run -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker mygoprog

Docker 位置在您的发行版中可能不同,您可能还需要--privileged标志。


查看完整回答
反对 回复 2021-10-04
  • 1 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信