使用 docker 组合卷保留 %USERPROFILE% 文件夹

persist %USERPROFILE% folder using docker compose volume

我正在搜索如何在卷安装中保留用户配置文件文件夹

我有文件夹 C:\Users\ABEL\source\repos,需要为 windows 容器保留该文件夹。用户名应该来自主机。未知。

下面是我的 docker-compose 文件,卷部分不正确。 任何评论都会有所帮助。提前致谢

version: '3.4'

services:
  directoryservice:
    image: abc-directoryservice:latest
    build: .
    ports:
      - "44309:44309"
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:44309;
      - ASPNETCORE_Kestrel__Certificates__Default__Password=welcome123#
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ./devops/https/abccert.pfx:/https/aspnetapp.pfx:ro
      # - "$env:USERPROFILE/source:$env:USERPROFILE/source"
      - ${Env:USERPROFILE}\source:${Env:USERPROFILE}\source

我遇到以下错误

invalid interpolation format for services.directoryservice.volumes.[]: "${Env:USERPROFILE}\source:${Env:USERPROFILE}\source". You may need to escape any $ with another $.

$env:USERPROFILE/${env:USERPROFILE} 语法 特定于 PowerShell

根据 the docs 判断,docker-compose 使用自己的语法:$USERPRPOFILE / ${USERPROFILE}


您报告 follow-up 问题,即 Windows-style 路径存储在 $USERPROFILE (%USERPROFILE%) 中(例如C:\Users\jdoe\source) 未转换为 Unix-style 路径(例如 c/Users/jdoe/source

建议你必须设置环境变量COMPOSE_CONVERT_WINDOWS_PATHS 1before 运行你的docker-compose命令。

例如,在 PowerShell 会话中:

$env:COMPOSE_CONVERT_WINDOWS_PATHS=1

考虑将此语句添加到您的 $PROFILE file 中,以便它在以后的 PowerShell 会话中也能生效。