向docker部署go应用程序时遇到问题
嗨,我是个新手,这是我第一次与docker合作,将应用程序打包到容器中。我正在一个linux虚拟机上工作,应用程序位于dir:/home/core/app/app name下。在dir app name中有main.go程序和Dockerfile。Dockerfile包含以下内容:向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 .
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
- 执行构建,输出应该出现在工作环境中 目录
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
- 执行构建,输出应该出现在工作环境中 目录
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,我可以让它工作,并建立形象,但我仍然有问题运行它。有关更新的信息,请参见我的编辑