我是 Docker 的新手。我使用 ASP.Net Core 使用 Visual Studio 2019 以及 VS Code 创建了一个 Web API。它工作正常。然后我添加了 docker 支持并添加了默认值的 Dockerfile。
当我尝试构建 docker 镜像时,它在 Visual Studio 2019 和 VS Code 中都失败了。
但是,如果我尝试使用 Visual Studio 2019 提供的选项(我可以选择 docker 作为运行)运行 Docker 映像,则会创建该映像。 但是当我在 Visual Studio 2019 或 VS Code 中运行 build 命令时,即
docker build -f ./Dockerfile --force-rm -t mytestapp:dev ..
it throws following error<br>
=> ERROR [build 3/7] COPY [myTestApp.csproj, ./]
Content of my docker file is given below
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["myTestApp.csproj", "./"]
RUN dotnet restore "myTestApp.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "myTestApp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "myTestApp.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "myTestApp.dll"]
还附上项目结构图:
答案 0 :(得分:2)
简单的 docker build
命令无法与 Visual Studio 创建的默认 Dockerfile 一起使用,因为路径是相对于解决方案的根目录而不是项目的根目录指定的。
您可以检查 VS 的构建输出以确定它如何构建映像(简化版):
docker build
-f "PROJECT_PATH\Dockerfile"
-t IMAGE_NAME:dev
"SOLUTION_PATH"
如您所见,它使用项目文件夹 (-f) 中的 Dockerfile 构建,但来自解决方案文件夹。
我猜他们这样做是因为它的优点是将每个 Dockerfile 保存在自己的项目文件夹中,同时让您使用更一致的基于解决方案的路径引用该文件夹外的资源。除此之外,它很烦人。
您可以将 Dockefile 移动到解决方案文件夹并保持不变,但是 VS 中的 Docker 功能将停止按预期工作。或者您可以采用 VS 约定并相应地调整您的脚本。
答案 1 :(得分:1)
我通过提供 docker 命令的绝对路径解决了这个问题。
答案 2 :(得分:0)
删除您在 WORKDIR "/src/." 中包含的 .(dot)。
答案 3 :(得分:0)
尝试从父文件夹运行命令。
cd ..
docker build -t sometag:dev -f /ProjectDir/Dockerfile .
答案 4 :(得分:0)
使用 docker-compose 轻松创建和拆除您的设置。 第一步:将下面的代码保存为“docker-compose.yml”,比你的Dockerfile高一级(与你项目的.sln文件路径相同)
version: '3'
services:
web:
build:
context: .
dockerfile: [PROJECTNAME]\Dockerfile
ports:
- "5000:80"
networks:
- aspcore-network
sql-server:
image: mcr.microsoft.com/mssql/server
networks:
- aspcore-network
networks:
aspcore-network:
driver: bridge
步骤 2. 添加附加服务(MYSQL/REDIS/ETC) 步骤 3. 打开终端到 docker-compose.yml 位置 第 4 步。运行“docker-compose build”,然后运行“docker-compose up -d” 步骤 5. 完成后运行“docker-compose down”