docker - dotnet watch 在具有多项目解决方案的容器中运行

标签 docker docker-compose

我正在尝试创建一个 Dockerfile 以及一个 docker-compose.yml 文件来运行 dotnet watch run在多项目 ASP.Net Core 解决方案上。目标是让容器监视所有三个项目的变化。

我的解决方案结构是这样的:

Nc.Application
Nc.Domain
Nc.Infrastructure
docker-compose.yml
Nc.Application包含要运行的主项目,另外两个文件夹是主项目引用的.Net标准项目。内部 Nc.Application我有一个文件夹,Docker ,用我的 dockerfile。
Controllers
Docker
  Development.Dockerfile
Properties
Program.cs
Startup.cs
...

我的 Dockerfile 和 compose 文件包含以下内容:

Development.Dockerfile
FROM microsoft/dotnet:2.1-sdk AS build
ENTRYPOINT [ "dotnet", "watch", "run", "--no-restore", "--urls", "http://0.0.0.0:5000" ]

docker-compose.yml
version: '3'

services:

  nc.api:
    container_name: ncapi_dev
    image: ncapi:dev
    build:
      context: ./Nc.Application
      dockerfile: Docker/Development.Dockerfile
    volumes:
      - ncapi.volume:.
    ports:
      - "5000:5000"
      - "5001:5001"

volumes:
  ncapi.volume:

当我尝试运行 docker-compose up我收到以下错误:
ERROR: for f6d811109779_ncapi_dev  Cannot create container for service nc.api: invalid volume specification: 'nc_ncapi.volume:.:rw': invalid mount config for type "volume": invalid mount path: '.' mount path
must be absolute

ERROR: for nc.api  Cannot create container for service nc.api: invalid volume specification: 'nc_ncapi.volume:.:rw': invalid mount config for type "volume": invalid mount path: '.' mount path must be absolute
ERROR: Encountered errors while bringing up the project.

我不知道卷的路径应该是什么,因为这个想法是创建
一个不直接包含文件的容器,而是监视我系统上文件夹中的文件。

有人对如何解决这个问题有任何建议吗?

编辑:

我更新了WORKDIR在 Dockerfile 到 /app/Nc.Application ,将卷路径更新为 ./:/app并删除了命名卷 volumes: ncapi.volume .但是,我现在收到以下错误:
ncapi_dev | watch : Polling file watcher is enabled
ncapi_dev | watch : Started
ncapi_dev | /usr/share/dotnet/sdk/2.1.403/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error NETSDK1004: Assets file '/app/Nc.Application/c:/Users/Christian/Documents/source/nc/Nc.Application/obj/project.assets.json' not found. Run a NuGet package restore to generate this file. [/app/Nc.Application/Nc.Application.csproj]
ncapi_dev |
ncapi_dev | The build failed. Please fix the build errors and run again.
ncapi_dev | watch : Exited with error code 1
ncapi_dev | watch : Waiting for a file to change before restarting dotnet...

最佳答案

更新:最新 VS Code Insiders 介绍 Remote Development允许您直接 work inside a container .值得一试。

你不应该在容器的根目录挂载东西。使用另一个挂载点,如 /app .此外,对于这种情况,您不需要命名卷,而是绑定(bind)挂载。

进行这样的更改

Development.Dockerfile

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /app
ENTRYPOINT [ "dotnet", "watch", "run", "--no-restore", "--urls", "http://0.0.0.0:5000" ]

docker-compose.yml
version: '3'

services:

  nc.api:
    container_name: ncapi_dev
    image: ncapi:dev
    build:
      context: ./Nc.Application
      dockerfile: Docker/Development.Dockerfile
    volumes:
      - ./:/app
    ports:
      - "5000:5000"
      - "5001:5001"

关于docker - dotnet watch 在具有多项目解决方案的容器中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53238901/

相关文章:

docker - Spring Batch是否可以使用外部应用程序启动容器?

maven - 如何将带有密码的maven settings.xml放在源代码管理中

docker - 在 docker-compose down 之前备份 Mysql DB

bash - 如何将docker客户端环境变量过滤到docker run命令中?

Docker:如何修复 "Layer already being pulled by another client. Waiting"

Docker 容器时区保持为 UTC

docker - 在 Docker Compose 中自动创建网络

javascript - 在 docker compose 中运行后续迁移

Docker 错误 : Cannot start service . ..:找不到网络 7808732465bd529e6f20e4071115218b2826f198f8cb10c3899de527c3b637e6

docker - 如何在注入(inject) docker 容器之前评估主机上的环境变量 bash 表达式?