。NET Core Docker装载卷

问题描述 投票:6回答:1

我具有以下Dockerfile以创建.NET Core 2.1 APP:

FROM microsoft/dotnet:2.1.402-sdk AS builder
WORKDIR /app
# copy csproj and restore as distinct layers
COPY . .
RUN dotnet restore ./myproject.sln
# copy everything else and build
COPY . .
RUN dotnet publish ./myproject/myproject.csproj -c Release -o /app/out

# build runtime image
FROM microsoft/dotnet:2.1.4-aspnetcore-runtime
WORKDIR /app
COPY --from=builder /app/out ./
ENV ASPNETCORE_ENVIRONMENT Production
ENTRYPOINT ["dotnet", "myproject.dll"]

我创建了Docker映像,可以实例化容器而没有任何问题。当我尝试在另一个容器之间共享数据时,然后创建以下docker-compose文件:

version: "2"

services:
  another_app:
    restart: always
    image: another_app:latest
    container_name: another_app
    ports:
      - "4000"
    volumes:
      - shared-folder:/dist

  myproject_app:
    restart: always
    image: myproject:latest
    container_name: myproject
    volumes:
      - shared-folder:/app

volumes:
  shared-folder:

以这种方式配置不起作用。我收到该应用程序的怪异.NET消息:

myproject_app | Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
myproject_app |   http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
another_app| 0|another-a | Node Express server listening on http://localhost:4000 

现在,我发现不在应用程序根目录中定义卷时,问题就消失了。例如,如果我这样做:

myproject_app:
    restart: always
    image: myproject:latest
    container_name: myproject
    volumes:
      - shared-folder:/app/another-folder

然后它起作用。为什么不能在.NET Core应用程序的根级别安装卷,为什么会出现该错误?

docker .net-core docker-compose asp.net-core-2.1
1个回答
0
投票

我也遇到过类似的问题,我想我知道原因:

以这种方式配置不起作用。我收到该应用程序的怪异.NET消息:

myproject_app | Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
myproject_app |   http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
another_app| 0|another-a | Node Express server listening on http://localhost:4000 

此消息的发生是因为dotnet工具找不到.dll文件,因此将其视为dotnet子命令,然后由于需要dotnet sdk而引发错误。 (因为最后一次构建仅包含运行时)

主要问题

问题在于使用码头工人卷shared-folder:/appWORKDIR/app。真正发生的是,当连接docker卷时,它将容器/app目录的内容与本地计算机中的shared-folder目录overwrites的内容连接在一起,因此无法找到应用程序.dll ]文件,并发生上述错误。

这就是为什么当您将其更改为shared-folder:/app/another-folder时,由于它已映射到容器中的空目录,因此能够正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.