我用golang设置了一个简单的服务器:
package main
import (
"golang-server/database"
"golang-server/helper"
"log"
"net/http"
)
func main() {
database.Connect()
port := helper.GetPort()
SetupRoutes()
log.Printf("connect to http://localhost:%s/ for GraphQL playground", port)
log.Fatal(http.ListenAndServe(":"+port, router))
}
下面是我的文件夹结构:
下面是我的dockerfile的样子:
FROM golang:1.18
WORKDIR $GOPATH/src
COPY . .
RUN go mod download
RUN go build -o /golang-server
EXPOSE 8080
CMD ["golang-server"]
我在主目录中运行这些docker命令:
docker build . -t golang-server
docker run --network=golang-server --name=golang-server golang-server
但是,当我运行时,我会得到这个错误:
docker:来自守护进程的错误响应:未能创建shim任务: OCI运行时创建失败: runc创建失败:无法启动容器进程: exec:“golang”:可执行文件未在$PATH中找到:未知。
为了成功地部署到docker,我应该设置什么dockerfile?
发布于 2022-08-29 02:23:33
这个问题与您在Dockerfile CMD ["golang-server"]
中的最后一行有关。当您把它放在那里时,系统(容器内部)试图在$PATH
变量golang-server
中找到一个可执行文件。
要解决这个问题,您只需在用CMD ["/golang-server"]
( /
,RUN go build -o /golang-server
)构建应用程序之后,将最后一行从Dockerfile编辑到RUN go build -o /golang-server
。最后一个Dockerfile应该是这样的:
FROM golang:1.18
WORKDIR $GOPATH/src
COPY . .
RUN go mod download
RUN go build -o /golang-server
EXPOSE 8080
CMD ["/golang-server"]
https://stackoverflow.com/questions/73523492
复制相似问题