docker 如何使用maven之类的结构对接golang web应用程序

vdzxcuhz  于 2022-11-22  发布在  Docker
关注(0)|答案(1)|浏览(232)

我有一个困难的时间停靠一个Web应用程序与以下结构:

├── Dockerfile
├── file1.txt
├── file2.txt
├── file3.txt
├── go.mod
└── src
    ├── go
    │   ├── handlers
    │   │   └── handlers.go
    │   ├── main.go
    │   └── parsetext
    │       └── parsetext.go
    └── resources
        ├── static
        │   └── style.css
        └── templates
            ├── index.html
            └── result.html

我尝试过多种方法来塑造形象,但到目前为止没有一种方法成功。以下是其中的一些。
第一次
如果你能帮我的话

7gcisfzg

7gcisfzg1#

我在您的Dockerfile中发现两个问题:

  1. COPY *.go ./
    它只复制当前目录中的*.go文件。我想你想像这样复制整个目录:COPY src/go ./src/go
  2. RUN go build -o /app
    指定的建置产物/appWORKDIR /app建立的目录恩怨。我认为您应该指定要建置的套件。我认为正确的套件应该是:RUN go build -o theapp ./src/go(将工件名称theapp更改为您喜欢的任何名称)。
    这里有一个可能对你有用。推荐使用multi-stage build
# =============== build stage ===============
FROM golang:1.19 as build

WORKDIR /app

COPY go.mod ./

RUN go mod download

COPY src/go ./src/go

RUN go build -o theapp ./src/go

# =============== final stage ===============
FROM debian:bullseye AS final

WORKDIR /app

EXPOSE 8080

COPY --from=build /app/theapp ./
# Make sure the resources folder is copied to the correct place that your app expected.
COPY src/resources ./resources

CMD [ "/app/theapp" ]

相关问题