在Docker中部署Go应用程序时出现问题

问题描述:

您好我很新,这是我第一次使用docker将应用程序打包到容器中。我正在开发一个应用程序位于dir下的linux虚拟机:/ home/core/app/app-name在dir应用程序名称中有main.go程序和Dockerfile。该Dockerfile包含此:在Docker中部署Go应用程序时出现问题

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 

我试图从目录的/ home /核心/应用程序/应用程序名称运行:

docker build -t app-image . 

但我得到这个错误:

无法加载package:package。:在/ app/stars-app中没有可构建的Go源文件 命令'/ 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 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.. 
+2

您要添加的一切'/家庭/核心/应用/ APP-name',但你的WORKDIR是'/应用/ APP-name'。您也不要设置GOPATH,也不要指定要构建的包。如果您要在容器中构建应用程序,您仍然需要按照[如何编写Go代码](https://golang.org/doc/code.html) – JimB

+0

中所述的方式设置适当的环境设置,我认为你把'/ home/core/app/app-name'中的文件而不是'/ app/app-name'。尝试使目标一致,也许'RUN去建立-o main/app/app-name'和'CMD [“/ app/app-name/main”]' – Plato

+0

@Plato,我试过了,但我仍然得到了相同的输出。 –

这可能会为你工作...

  • 对被设置为图像的GOPATH /去
  • 安装在你的源极(S)/去/ SRC
  • 给出的GOPATH被设置并且来源是GOPATH
  • 工作目录设置为/应用
  • 执行内建立和输出应该在工作 目录

存在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 
+0

当我运行它,我得到了: 发送建立上下文码头工人守护100.9 KB 1步:从golang:最新 ---> 5850add7ecc2 2步:添加./app /去/ src目录/应用 LSTAT应用:无这样的文件或目录 –

+0

@ChristopherStephenson在Dockerfile所在的目录中本地位置我有一个名为“app”的文件夹,其中包含名为“app-name”的子文件夹,其中包含一个文件“main.go”..试图模仿你的应用程序结构基于所提供的信息。 [gist](https://gist.github.com/anonymous/62bd07425ac0dc62304a28501dc4c456) – ABC

+0

@gist,我能够得到它的工作,并建立图像,但我仍然有运行它的问题。查看我的编辑更新的信息 –