我在
main.go
文件中有一个 go 应用程序,它有一个服务器。服务器正在 localhost:9090
上运行。
我有我的manifest.yaml:
applications:
- name: golang-app
buildpacks:
- https://github.com/cloudfoundry/go-buildpack
memory: 4GB
disk_quota: 4GB
instances: 1
env:
GO_APP_ENV: prod
services:
- go_mariadb-prod
当我用
cf push -f manifest.prod.yaml
推送应用程序时,一切似乎一开始都正常。一切都正在正确下载和构建。
但是最后它崩溃了,并且在日志中出现了这个错误:
2023-03-07T14:14:13.86+0100 [CELL/0] OUT Downloading droplet...
2023-03-07T14:14:14.50+0100 [CELL/0] OUT Downloaded droplet (6.8M)
2023-03-07T14:14:14.50+0100 [CELL/0] OUT Starting health monitoring of container
2023-03-07T14:14:14.92+0100 [APP/PROC/WEB/0] ERR bash: ./main: No such file or directory
2023-03-07T14:14:14.93+0100 [APP/PROC/WEB/0] OUT Exit status 127
2023-03-07T14:14:14.93+0100 [CELL/SSHD/0] OUT Exit status 0
2023-03-07T14:14:20.21+0100 [API/1] OUT Process has crashed with type: "web"
2023-03-07T14:14:20.22+0100 [CELL/0] OUT Cell b8118f92-f568-41d6-a3a1-125361b0d5c2 stopping instance d0442bce-ea3e-4c23-5c08-6ac4
2023-03-07T14:14:20.22+0100 [CELL/0] OUT Cell b8118f92-f568-41d6-a3a1-125361b0d5c2 destroying container for instance d0442bce-ea3e-4c23-5c08-6ac4
我不明白这里出了什么问题。我通过更改manifest.yaml或push命令尝试了很多事情。但没有任何效果。
使用 go-buildpack 时,您应该遵循此 docs
一般来说,我建议使用 CF Binary-Buildpack(更快)。
您可以在系统上将 GO 应用程序构建为 Linux 二进制文件(如下所示),然后将二进制文件和所需的资源推送到 CF。
GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build -ldflags '-s -w' -o main ./cmd/main.go