我是 Docker 新手。我使用 Visual Studio 2019 以及 VS Code 中的 ASP.Net Core 创建了一个 Web API。效果很好。然后我添加了 docker 支持并添加了具有默认值的 Dockerfile。
当我尝试构建 docker 映像时,它在 Visual Studio 2019 和 VS Code 中都失败了。
但是,如果我尝试使用 Visual Studio 2019 提供的选项(我可以选择 docker 作为运行)运行 Docker 映像,则会创建该映像。 但是当我在 Visual Studio 2019 或 VS Code 中运行构建命令时,即
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"]
还附上项目结构图:
简单的
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 约定并相应地调整您的脚本。
Dockerfile
标志指定
-f
的路径。
cd ..
docker build -t imagename:tag -f ProjectDir/Dockerfile .
.csproj
和其他文件,所以如果你说:
COPY ["myTestApp.csproj", "./"]
确保您位于主机上的正确目录中。如果您使用其他项目参考,则 Docker 支持创建的 Dockerfile
并不总是构建镜像的理想选择,但可以作为一个很好的基础。
docker build . -f [ProjectDir]\Dockerfile
docker-compose
轻松创建和拆除您的设置。第1步:将下面的代码保存为比您的Dockerfile高一级的目录
docker-compose.yml
(与项目的
.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
cd \CoreDockerAPI docker build -f CoreDockerAPI\Dockerfile --force-rm -t myfirstimage .
docker run -it myfirstimage
.NET 5 Web API 项目时选中了启用 Docker。
Docker OS,我选择了Linux。
docker build -f Movie.WebAPI\Dockerfile --force-rm -t movie-api:v1 .
作为最后一步,我运行了以下命令:
docker run -it --rm -p 8080:80 movie-api:v1
现在
movie-api 出现 当我输入 docker images
时。
\AppData\Roaming\Code\User\settings.json),您可以更改默认值:
"docker.commands.build": "${containerCommand} build --pull --rm -f \"${dockerfile}\" -t ${tag} \"${context}\"",
到
"docker.commands.build": "${containerCommand} build --pull --rm -f \"${dockerfile}\" -t ${tag} \"${workspaceFolder}\"",
如果您的项目不是 VS 解决方案的一部分,那么您可以控制/设置编辑 csproj 文件 (.) 的“DockerfileContext”。