Golang Telegram Bot项目Railway容器构建失败求助
[stage-0 8/8] RUN --mount=type=cache,id=s/e3978b7a-2c8f-410f-8252-e31015239006-/root/cache/go-build,target=/root/.cache/go-build go build -o out:
#14 0.370 no Go files in /app
Dockerfile:23
| # build phase |
|---|
| COPY . /app/. |
| >>> RUN --mount=type=cache,id=s/e3978b7a-2c8f-410f-8252-e31015239006-/root/cache/go-build,target=/root/.cache/go-build go build -o out |
25 |
ERROR: failed to solve: process "/bin/bash -ol pipefail -c go build -o out" did not complete successfully: exit code: 1
Error: Docker build failed
## 解决办法 - **修改构建命令,指定入口路径**:Railway默认执行`go build -o out`,但你的主入口在`cmd/bot`子目录,需要在项目的Railway环境变量中添加`NIXPACKS_BUILD_CMD`,值设为`go build -o out ./cmd/bot`,让Go编译器定位到正确的入口文件。 - **确认go.mod位置**:确保`go.mod`文件在项目根目录,Railway的构建流程以根目录为工作目录,如果`go.mod`不在根目录,会导致Go模块识别异常。 - **自定义Dockerfile(可选)**:如果Nixpacks自动生成的构建逻辑不适用,可以手动编写Dockerfile替换默认流程: ```dockerfile # 构建阶段 FROM golang:1.21-alpine AS builder WORKDIR /app COPY . . RUN go mod download RUN go build -o telegram-bot ./cmd/bot # 运行阶段 FROM alpine:latest WORKDIR /app COPY --from=builder /app/telegram-bot . CMD ["./telegram-bot"]
将上述内容保存为项目根目录的Dockerfile,然后在Railway部署设置中选择使用自定义Dockerfile即可。
内容的提问来源于stack exchange,提问作者n3k
相关产品推荐
相关产品推荐

