如何使用 docker-compose.override.yml 为 App_Data 文件夹添加卷?

How can I add a volume for the App_Data folder using docker-compose.override.yml?

我正在试验 Visual Studio 的 docker 支持,并想为 C:\inetpub\wwwroot\App_Data 添加卷装载。

我的 Dockerfile 看起来像这样:

FROM microsoft/aspnet:4.7.1-windowsservercore-1709
ARG source
WORKDIR /inetpub/wwwroot
COPY ${source:-obj/Docker/publish} .

我的 docker-compose.yml 文件如下所示:

版本:'3.4'

services:
  my.app:
    image: ${DOCKER_REGISTRY}myapp
    build:
      context: .\My.App
      dockerfile: Dockerfile

现在我已经尝试了几乎所有在我的 docker-compose.override.yml 文件中指定 volumes 的变体,包括:

version: '3.4'

services:
  my.app:
    volumes:
      - "C:\inetpub\wwwroot\App_Data"
    ports:
      - "80"
networks:
  default:
    external:
      name: nat

services:
  my.app:
    volumes:
      - "C:\temp\dockerappdata1":"C:\inetpub\wwwroot\App_Data"
    ports:
      - "80"
networks:
  default:
    external:
      name: nat

services:
  my.app:
    volumes:
      - type: volume
        source: "app_data"
        target: "C:\inetpub\wwwroot\App_Data"
    ports:
      - "80"
networks:
  default:
    external:
      name: nat
volumes:
  app_data:

但在所有情况下,我都无法 运行 项目,它报告 compose 存在某种配置问题,或者在启动容器时出现问题,并显示超级无用的消息:

encountered an error during Start: failure in a Windows system call: The compute system exited unexpectedly.

正确的语法是什么?

如果我对你的问题的理解正确,你想将卷挂载 "C:\inetpub\wwwroot\App_Data" 到容器中,对吗?

如果是这种情况,您应该在 yaml 文件中添加以下内容:

services:
  my.app:
    volumes:
      - C:\inetpub\wwwroot\App_Data:C:\temp\dockerappdata1
     # Syntax is HOST_PATH:CONTAINER_PATH:[ro/rw] (the access mode is optional)
    ports:
      - "80"

有关语法的更多信息:https://docs.docker.com/compose/compose-file/#short-syntax-3

version: '3.4'

services:
  my.app:
    volumes:
      - "C:\inetpub\wwwroot\App_Data"
    ports:
      - "80"
networks:
  default:
    external:
      name: nat

services:
  my.app:
    volumes:
      - "C:\temp\dockerappdata1":"C:\inetpub\wwwroot\App_Data"
    ports:
      - "80"
networks:
  default:
    external:
      name: nat

services:
  my.app:
    volumes:
      - type: volume
        source: "app_data"
        target: "C:\inetpub\wwwroot\App_Data"
    ports:
      - "80"
networks:
  default:
    external:
      name: nat
volumes:
  app_data:

我认为这里的问题是,您正在尝试挂载一个已经存在的目录。