GitHub Actions自托管Runner构建Docker镜像时找不到Dockerfile
问题解决步骤
1. 添加代码拉取步骤(核心修复)
你的GitHub工作流缺少代码同步步骤,自托管Runner不会自动拉取仓库代码,这是Docker找不到Dockerfile的直接原因。修改后的工作流如下:
name: Build and launch playground on: push: branches: - main jobs: create_image_and_run_it: runs-on: self-hosted steps: - name: 拉取仓库代码 uses: actions/checkout@v4 - name: 构建Docker镜像 run: sudo docker build -t playground -f Dockerfile ./ - name: 清理旧容器(避免端口冲突) run: sudo docker stop playground || true && sudo docker rm playground || true - name: 启动新容器 run: sudo docker run -d --name playground -p 8080:80 playground
2. 修复Dockerfile中的拼写错误
Dockerfile里引用的Playground.sln与仓库根目录实际的解决方案文件Spielplatz.sln不符,会导致dotnet restore失败。修改Dockerfile对应行:
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /app COPY Spielplatz.sln ./ # 替换为仓库实际的解决方案文件名 COPY ./Playground.WebApp/Playground.WebApp.csproj ./Playground.WebApp RUN dotnet restore COPY . ./ RUN dotnet publish -c Release -o out FROM nginx:1.23.0-alpine WORKDIR /app EXPOSE 8080 COPY nginx.conf /etc/nginx/nginx.conf COPY --from=build /app/out/wwwroot /usr/share/nginx/html
3. 额外优化建议
- 给Runner用户添加Docker权限,避免每次用
sudo:
执行后重启GitHub Runner服务即可生效。sudo usermod -aG docker $USER - 验证树莓派的Docker服务状态:
sudo systemctl status docker - 检查8080端口是否被占用:
sudo lsof -i :8080
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

