Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Docker for Go计划中构建Docker_Go_Docker - Fatal编程技术网

在Docker for Go计划中构建Docker

在Docker for Go计划中构建Docker,go,docker,Go,Docker,我正在尝试为Go程序构建一个非常小的Docker容器。为此,我希望使用Docker容器来构建Go程序,然后(在容器内)构建另一个Docker容器来运行该程序 以下是我的构建文档: FROM google/golang WORKDIR /gopath/src/mycompany/mygoprog # Build the Contributors application RUN mkdir -p /gopath/src/mycompany/mygoprog ADD ./src/* /gopath/

我正在尝试为Go程序构建一个非常小的Docker容器。为此,我希望使用Docker容器来构建Go程序,然后(在容器内)构建另一个Docker容器来运行该程序

以下是我的构建文档:

FROM google/golang
WORKDIR /gopath/src/mycompany/mygoprog

# Build the Contributors application
RUN mkdir -p /gopath/src/mycompany/mygoprog
ADD ./src/* /gopath/src/mycompany/mygoprog/
RUN CGO_ENABLED=0 GOOS=linux go build -a -tags rs -ldflags '-w' /gopath/src/mycompany/mygoprog/*.go
RUN cp mygoprog /mygoprog
CMD docker build -t foobar /gopath/src/mycompany/mygoprog
我的源目录中有我的Go程序(平凡——编译/运行)和最终产品的Dockerfile:

FROM scratch
ADD /mygoprog mygoprog
ENTRYPOINT ["/mygoprog"]
EXPOSE 9100
这些文件按如下方式组织:

/myproject
   Dockerfile
   /src
      Dockerfile
      mygoprog.go
要启动构建,请转到顶部目录并运行:

docker build .
这运行没有错误…并且没有最终图像!输出如下所示:

bash-3.2$ docker build .
Sending build context to Docker daemon 6.656 kB
Sending build context to Docker daemon 
Step 0 : FROM google/golang
 ---> 3cc1d7ae0e9c
Step 1 : WORKDIR /gopath/src/mycompany/mygoprog
 ---> Using cache
 ---> 49b9686dcbed
Step 2 : RUN mkdir -p /gopath/src/mycompany/mygoprog
 ---> Using cache
 ---> 0d0139bb8cae
Step 3 : ADD ./src/* /gopath/src/mycompany/mygoprog/
 ---> 964ea5ca6afb
Removing intermediate container e57719a417d5
Step 4 : RUN CGO_ENABLED=0 GOOS=linux go build -a -tags rs -ldflags '-w' /gopath/src/mycompany/mygoprog/*.go
 ---> Running in 608ad65db52c
 ---> 6e91f06b7654
Removing intermediate container 608ad65db52c
Step 5 : RUN cp mygoprog /mygoprog
 ---> Running in 196af3db881b
 ---> 5e90e11ffc7d
Removing intermediate container 196af3db881b
Step 6 : CMD docker build -t foobar /gopath/src/mycompany/mygoprog
 ---> Running in 4794354abf2b
 ---> d91a908ee663
Removing intermediate container 4794354abf2b
Successfully built d91a908ee663

我遗漏了什么,所以我得到了一个最终的、可运行的Docker,里面有我编译的程序?

您已经生成了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
标志