【发布时间】:2020-05-03 10:25:18
【问题描述】:
我正在尝试在 Windows 基础上构建一个 ASP.Net Core 容器,因为我想测试一些 AD 查询。同时,我想与容器共享我的开发文件夹,以便我可以即时编辑文件,而无需每次都重新编译容器。在 Linux 和 laravel 上它工作得很好:
volumes:
- ./:/var/www
在 Windows 上,我的 docker 文件如下所示:
FROM mcr.microsoft.com/dotnet/core/sdk:latest AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:latest
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "project.dll"]
我的作曲家是这样的:
version: '3.5'
services:
#ASP
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:80"
environment:
- "ASPNETCORE_URLS=http://+:80"
container_name: app
working_dir: /app
#restart: on-failure
volumes:
- type: bind
source: .\
target: c:\app
entrypoint: ["dotnet", "project.dll"]
添加卷部分后,我会立即收到以下消息:
It was not possible to find any installed .NET Core SDKs
Did you mean to run .NET Core SDK commands? Install a .NET Core SDK from:
https://aka.ms/dotnet-download
没有卷我至少可以正常运行它,但尝试一些东西有点糟糕,)
知道我做错了什么吗?
更新 我发现了错误。挂载后的应用数据为空,但应包含应用文件。
C:\app>dir
Volume in drive C has no label.
Volume Serial Number is 76CF-40D6
Directory of C:\app
05/03/2020 11:34 AM <DIR> .
05/03/2020 11:34 AM <DIR> ..
05/01/2020 10:25 PM 162 appsettings.Development.json
05/01/2020 10:25 PM 192 appsettings.json
05/03/2020 11:34 AM 106,534 project.deps.json
05/03/2020 11:34 AM 9,216 project.dll
05/03/2020 11:34 AM 169,984 project.exe
05/03/2020 11:34 AM 1,864 project.pdb
05/03/2020 11:34 AM 224 project.runtimeconfig.json
05/03/2020 11:34 AM 35,840 project.Views.dll
05/03/2020 11:34 AM 3,544 project.Views.pdb
05/03/2020 11:34 AM 490 web.config
05/03/2020 11:34 AM <DIR> wwwroot
10 File(s) 328,050 bytes
3 Dir(s) 21,299,187,712 bytes free
我的问题仍然是,我需要更改什么才能在本地磁盘上拥有 app 文件夹?
另一个更新。 我安装了文件夹,但不幸的是,与 Lavavel 不同,即使我将所有内容都更改为 Razor,我也无法即时编辑文件。也许我必须以某种方式将另一个文件夹添加到容器中...目前我在想最好的方法是在本地安装 IIS...
更新,终于成功了。明天我会更新解决方案。
【问题讨论】:
-
“知道我做错了什么吗?”您根本不应该将源代码复制到 Docker 容器中。在您的开发机器或 CI 机器上运行
dotnet publish,然后仅将已发布的工件部署到 Docker 容器。mcr.microsoft.com/dotnet/core/aspnet:latest正是此类场景的基础镜像,因为它没有捆绑 .NET Core SDK,因此无法运行dotnet publish。
标签: docker asp.net-core docker-compose