Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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部署go应用程序时遇到问题_Go_Docker - Fatal编程技术网

向docker部署go应用程序时遇到问题

向docker部署go应用程序时遇到问题,go,docker,Go,Docker,嗨,我是个新手,这是我第一次与docker合作,将应用程序打包到容器中。我正在一个linux虚拟机上工作,应用程序位于dir:/home/core/app/app name下。在dir app name中有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 .

嗨,我是个新手,这是我第一次与docker合作,将应用程序打包到容器中。我正在一个linux虚拟机上工作,应用程序位于dir:/home/core/app/app name下。在dir app name中有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 .
但我有一个错误:

docker: Error response from daemon: Container command '/app/app-name/main' not found or does not exist..
无法加载包:包。:在/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 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
  • 执行构建,输出应该出现在工作环境中 目录
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

app/app name/main.go

package main

import "fmt"

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


输出

hello, world

这可能对你有用

  • 图像的GOPATH设置为/go
  • 在/go/src下安装源代码
  • 给定gopath已设置且源位于gopath内
  • 将工作目录设置为/app
  • 执行构建,输出应该出现在工作环境中 目录
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

app/app name/main.go

package main

import "fmt"

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


输出

hello, world

我在这方面也有问题,但不知怎么的,基于这一点,这对我起了作用

# ...AS builder ...

FROM golang:1.14
WORKDIR /go/src/app
# In your case, ./main.go or just .
COPY ./server.go .
COPY --from=builder ./app/build .

RUN go get -d -v ./...
RUN go install -v ./...

CMD ["app"]

我在这方面也有问题,但不知怎么的,基于这一点,这对我起了作用

# ...AS builder ...

FROM golang:1.14
WORKDIR /go/src/app
# In your case, ./main.go or just .
COPY ./server.go .
COPY --from=builder ./app/build .

RUN go get -d -v ./...
RUN go install -v ./...

CMD ["app"]

您正在将所有内容添加到
/home/core/app/app name
,但您的WORKDIR是
/app/app name
。您也不设置GOPATH,也不指定要生成的包。如果您在容器中构建应用程序,您仍然需要按照中所述进行适当的环境设置,我认为您将文件放在
/home/core/app/app name
而不是
/app/app name
中。试着让dirs保持一致,可能是
运行go build-o main/app/app name
CMD[“/app/app name/main”]
@Plato,我已经尝试过了,但仍然得到了相同的输出。你正在将所有内容添加到
/home/core/app/app name
,但你的WORKDIR是
/app/app name
。您也不设置GOPATH,也不指定要生成的包。如果您在容器中构建应用程序,您仍然需要按照中所述进行适当的环境设置,我认为您将文件放在
/home/core/app/app name
而不是
/app/app name
中。尝试使目录一致,可能是
运行go build-o main/app/app name
CMD[“/app/app name/main”]
@Plato,我已经尝试过了,但仍然得到了相同的输出。当我运行它时,我得到了:将构建上下文发送到Docker daemon 100.9 kB步骤1:来自golang:latest-->5850add7ecc2步骤2:添加。/app/go/src/app lstat app:没有这样的文件或directory@ChristopherStephenson在Dockerfile所在的本地目录中,我有一个名为“app”的文件夹包含一个名为“app name”的子文件夹,其中包含一个文件“main.go”。根据提供的信息,试图模仿你的应用程序结构@gist,我可以让它工作,并建立形象,但我仍然有问题运行它。请参阅我的编辑,了解我运行时得到的更新信息:将构建上下文发送到Docker daemon 100.9 kB步骤1:来自golang:latest-->5850add7ecc2步骤2:添加./app/go/src/app lstat app:无此类文件或directory@ChristopherStephenson在Dockerfile所在的本地目录中,我有一个名为“app”的文件夹包含一个名为“app name”的子文件夹,其中包含一个文件“main.go”。根据提供的信息,试图模仿你的应用程序结构@gist,我可以让它工作,并建立形象,但我仍然有问题运行它。有关更新的信息,请参见我的编辑