如何在devcontainer中安装dotnet用户秘密?

时间:2020-04-06 14:59:20

标签: visual-studio-code

我使用devcontainer来构建和调试.NET Core应用程序。我想在主机和容器之间共享user-secrets

如果用户的位置取决于主机,该怎么办?

  • Windows:%APPDATA%/ Microsoft / UserSecrets
  • Mac / Linux:$ HOME / .microsoft / usersecrets

我尝试同时安装两个位置,但这会引发错误。

  • .devcontainer / devcontainer.json
{
  "dockerComposeFile":"docker-compose.yml",
  "service":"devcontainer",
  "runServices":[],
  "workspaceFolder":"/workspace",
  "forwardPorts":[
    5000,
    5001
  ],
  "remoteEnv":{
    "ASPNETCORE_ENVIRONMENT":"Development",
    "ASPNETCORE_URLS":"https://+:5001;http://+:5000"
  }
}
  • .devcontainer / docker-compose.yml
version: "3.7"
services:
    devcontainer:
        image: mydevcontainerimage:12345
        volumes:
            - ..:/workspace:cached
            - ${APPDATA}/Microsoft/UserSecrets/:/root/.microsoft/usersecrets
            - ${HOME}/.microsoft/usersecrets:/root/.microsoft/usersecrets

            # Forwards the local Docker socket to the container.
            - /var/run/docker.sock:/var/run/docker.sock
        command: sleep infinity

Docker-compose崩溃,并显示错误。

ERROR: Duplicate mount points: [/.microsoft/usersecrets:/root/.microsoft/usersecrets:rw, C:\Users\steven\AppData\Roaming\Microsoft\UserSecrets:/root/.microsoft/usersecrets:rw]

1 个答案:

答案 0 :(得分:2)

解决方案可能是在主机和容器之间使用named volume。 因此,docker-compose将仅引用该命名的卷。 但是,命名的卷创建将特定于主机。

有关基于主机路径创建命名卷的信息,请参见here

但是如所述here

Windows上的内置本地驱动程序不支持任何选项。

例如, device = c:\ a \ path \ to \ my \ folder 在Windows下将无法运行。

但是,由于Windows路径%APPDATA%扩展为类似 c:\ a \ path \ to \ my \ folder 的名称,您可以将其改写为 / host_mnt / c / a / path / to / my / folder 并将其用于设备

docker volume create --name my_test_volume --opt type=none --opt device=device=/host_mnt/c/a/path/to/my/folder --opt o=bind

对于其他人,这假定 c:可在docker设置(资源/文件共享)中访问。

相关问题