請我無法使用 asp.net 核心和 github 操作找出問題。我的目標是在 github 上使用操作和推送到 docker 的 ci。.dockerignore 上不排除這些檔案。
Step 6/17 : COPY ["PlayProject.API/PlayProject.API.csproj", "PlayProject.API/"]
COPY failed: file not found in build context or excluded by .dockerignore: stat PlayProject.API/PlayProject.API.csproj: file does not exist
Error: Command failed: docker build -f ./src/PlayProject.API/Dockerfile .
==========> 我在 github 上生成的 dotnet-ci.yml,由我編輯。
name: .NET
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v2
with:
dotnet-version: 6.0.x
- name: Restore dependencies
run: dotnet restore ./src/PlayProject.sln
- name: Build
run: dotnet build ./src/PlayProject.sln
- name: Test
run: dotnet test ./src/PlayProject.Test/PlayProject.Test.csproj
- name: Build and Push Docker Image
uses: mr-smithers-excellent/docker-build-push@v5
with:
image: ***/playprojtrial
registry: docker.io
dockerfile: ./src/PlayProject.API/Dockerfile
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
====> 我的 Dockerfile 使用 Visual Studio 自動生成,并由我自己編輯
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["PlayProject.API/PlayProject.API.csproj", "PlayProject.API/"]
COPY ["PlayProject.Core/PlayProject.Core.csproj", "PlayProject.Core/"]
RUN dotnet restore "PlayProject.API/PlayProject.API.csproj"
COPY . .
WORKDIR "/src/PlayProject.API"
RUN dotnet build "PlayProject.API.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "PlayProject.API.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "PlayProject.API.dll"]
=======> 專案結構
-PlayProject
-doc
-src
-PlayProject.API
-Dockerfile
-PlayProject.Core
-PlayProject.Infrastructure
-PlayProject.Tests
uj5u.com熱心網友回復:
您的構建在存盤庫根的背景關系中運行。您將 Dockerfile 傳遞給構建:
- name: Build and Push Docker Image
uses: mr-smithers-excellent/docker-build-push@v5
with:
dockerfile: ./src/PlayProject.API/Dockerfile
問題是您的 Dockerfile 位于子目錄中。你的 Dockerfile 說WORKDIR /src,但那是在 image 里面,而不是你的存盤庫。
幸運的是,您使用的 GitHub Action還接受一個附加引數directory,記錄為:
傳遞給 docker build 命令的目錄,如果不是專案根目錄
所以:
- name: Build and Push Docker Image
uses: mr-smithers-excellent/docker-build-push@v5
with:
directory: ./src
dockerfile: ./src/PlayProject.API/Dockerfile
uj5u.com熱心網友回復:
我更喜歡從 GitHub 作業流程中運行 bash 腳本,如下所示:
================== GitHub作業流程====================
上:作業:構建:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: chmod
run: |
chmod x ./docker/build/build.sh
==================================================== ==
================== Bash 腳本 =====================
DOCKER_IMAGE="MY_DOCKER_IMAGE" CONTAINER_NAME="MY_DOCKER_CONTAINER"
echo " " echo "構建 DOCKER 映像" echo " " echo "Docker 映像名稱 $DOCKER_IMAGE"
docker-compose -f "docker-compose.yaml" 構建
echo " " echo "完成" echo " "
==================================================== =
================== Docker Compose ================
version: '3.7'
services:
playproject:
container_name: ${CONTAINER_NAME}
hostname: ${CONTAINER_NAME}
image: ${DOCKER_IMAGE}
build:
context: .
dockerfile: Dockerfile
================== Docker檔案===================
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["PlayProject.API/PlayProject.API.csproj", "PlayProject.API/"]
====================================================
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/510525.html
標籤:C#码头工人asp.net 核心dockerfilegithub-动作
