在向Docker部署Go应用程序时遇到问题

嗨,我是新来的,这是我第一次与docker工作,将应用程序打包到一个容器。 我正在一个应用程序位于dir下的linux虚拟机上工作:/ home / core / app / app-name在dir应用程序名称中有main.go程序和Dockerfile。 Dockerfile包含这个:

FROM golang:latest RUN mkdir /app ADD . /home/core/app/app-name WORKDIR /app/app-name RUN go build -o main . CMD ["/app/main"] EXPOSE 8080 

我试过从dir / home / core / app / app-name运行:

 docker build -t app-image . 

但是我得到这个错误:

无法加载软件包:软件包。:/ app / stars-app中没有可build立的软件源文件命令'/ bin / sh -c go build -o main'。 返回一个非零的代码:1

我究竟做错了什么?

编辑:我得到了能够在我的Windows计算机上使用Dockfile生成图像:

 FROM golang:latest Add . /app/app-name EXPOSE 8080 CMD ["/app/app-name/main"] 

并通过运行:

 docker build -t star-image . 

当我运行“docker images”时,我可以看到图像,但是当我尝试运行它时使用:

 docker run -p 3000:8080 --name goapp --rm app-name 

我得到这个错误:

 docker: Error response from daemon: Container command '/app/app-name/main' not found or does not exist.. 

这可能适合你…

  • 图像的GOPATH设置为/ go
  • 在/ go / src下安装源代码
  • 鉴于Gopath已经确定,而且来源在GOPATH之内
  • 将工作目录设置为/ app
  • 执行构build,输出应该出现在工作目录中

Dockerfile

 FROM golang:latest ADD ./app /go/src/app RUN mkdir /app WORKDIR /app RUN go build -o main app/app-name CMD ["/app/main"] EXPOSE 8080 

应用程序/应用程序名称/ main.go

 package main import "fmt" func main() { fmt.Printf("hello, world\n") } 

 docker build -t app-image . docker run app-image 

产量

 hello, world