无法在Mac上共享路径/ASP.NET/Https和/ Microsoft / UserSecrets)

时间:2019-02-17 21:47:35

标签: .net docker docker-compose docker-for-mac

在macOS上使用docker-compose up遇到错误-

/ Applications / Visual Studio.app/Contents/Resources/lib/monodevelop/AddIns/docker/MonoDevelop.Docker/MSbuild/Sdks/Microsoft.Docker.Sdk/build/Microsoft.VisualStudio.Docker.Compose.targets(5 ,5):错误:未设置APPDATA变量。默认为空字符串。 删除dockercompose9508177338158005990_xyz_1 删除dockercompose9508177338158005990_xyz_1 建筑xyz 建筑xyz 重新创建886c8806b528_dockercompose9508177338158005990_xyz_1 ... 正在重新创建57afcf6f0cb0_dockercompose9508177338158005990_xyz_1 ... 正在重新制作886c8806b528_dockercompose9508177338158155990_xyz_1 ...错误 错误:886c8806b528_dockercompose9508177338158005990_xyz_1无法启动服务xyz:b'安装被拒绝:\ r \ nOS X上不共享/ Microsoft / UserSecrets和/ASP.NET/Https\r\na路径,并且Docker不知道。可以从Docker-> Preferences ...-> File Sharing配置共享路径。\ r \ n有关更多信息,请参见https://docs.docker.com/docker-for-mac/osxfs/#namespaces。\ r \ n。' 正在重新创建57afcf6f0cb0_dockercompose9508177338158005990_xyz_1 ...错误 错误:57afcf6f0cb0_dockercompose9508177338158005990_xyz_1无法启动服务xyz:b'Mounts被拒绝:\ r \ nOS X上未共享/ Microsoft / UserSecrets和/ASP.NET/Https\r\na路径,并且Docker不知道。可以从Docker-> Preferences ...-> File Sharing配置共享路径。\ r \ n有关更多信息,请参见https://docs.docker.com/docker-for-mac/osxfs/#namespaces。\ r \ n。' 错误:xyz无法启动服务xyz:b'Mounts被拒绝:\ r \ n路径/ Microsoft / UserSecrets和/ASP.NET/Https\r\na不与OS X共享,并且对于Docker是未知的。\ r \ n您可以从Docker-> Preferences ...-> File Sharing配置共享路径。\ r \ n有关更多信息,请参见https://docs.docker.com/docker-for-mac/osxfs/#namespaces。\ r \ n。' 错误:xyz无法启动服务xyz:b'Mounts被拒绝:\ r \ n路径/ Microsoft / UserSecrets和/ASP.NET/Https\r\na不与OS X共享,并且对于Docker是未知的。\ r \ n您可以从Docker-> Preferences ...-> File Sharing配置共享路径。\ r \ n有关更多信息,请参见https://docs.docker.com/docker-for-mac/osxfs/#namespaces。\ r \ n。' 在启动项目时遇到错误。

有关更多故障排除信息,请转到http://aka.ms/DockerToolsTroubleshooting(docker-compose)

2 个答案:

答案 0 :(得分:1)

在Visual Studio for Mac中打开使用Visual Studio for Windows创建的项目时,会发生此问题。由于团队中的大多数开发人员都在使用Windows计算机,因此我想找到一个解决方案,使我可以在不修改项目配置的情况下运行项目。它需要很多时间和研究,但我终于使它起作用:

  1. 检查文件夹~/.aspnet/https是否存在。如果是这样,请跳至步骤5

  2. 创建文件夹结构~./asp.net/https

  3. 运行以下命令以安装开发证书,该证书允许您通过HTTPS访问localhost。更多详细信息here

    dotnet dev-certs https --trust
    
  4. 运行以下命令以导出开发证书。记下密码,以备日后使用:

    dotnet dev-certs https -ep ${HOME}/.aspnet/https/ANY_FILE_NAME.pfx -p PASSWORD
    
  5. 检查文件夹~/.microsoft/usersecrets是否存在。如果这样做,则意味着您已经定义了一些用户密码,因此您可能可以跳到步骤7 ,否则,请继续下面的操作。

  6. 获取正在构建的Web应用程序的程序集的用户密钥ID。它通常位于一个名为Your.Project.Package.Name.Assembly.cs的文件中。您还可以在项目文件夹中搜索UserSecrets.UserSecretsIdAttribute("并获取GUID。

      

    如果您正在使用Docker Compose同时部署多个Web应用程序,则可能需要对解决方案中的多个程序集重复此步骤。

  7. ~./microsoft/usersecrets内,使用您在步骤6中获得的GUID创建一个文件夹,假定其中不存在。如果是这样,您只需使用下一步的内容更新其中的文件secrets.json

  8. 创建文件secrets.json并插入以下内容:

    {
      "Kestrel": {
        "Certificates": {
          "Default": {
            "Path": "/root/.aspnet/https/<FILE_NAME from Step 4>.pfx",
            "Password": "<PASSWORD from Step 4>"
          }
        }
      }
    }
    
  9. 在包含以下内容的Docker Compose配置文件位于解决方案中的同一文件夹中创建一个名为.env的文件:

    APPDATA=/Users/YOUR_USER_NAME
    

    当Visual Studio运行该工具时,Docker Compose会自动提取该文件。

  10. 将您刚创建的文件.env添加到.gitignore,这样就不会由于错误而提交更改。这样可以确保其他具有不同环境的开发人员也可以使用此方法。

  11. 创建一个符号链接,将~/ASP.NET指向.aspnet,如下所示:

    ln -s ~/.aspnet ~/ASP.NET
    
  12. 创建一个符号链接,将~/ASP.NET/Https指向~/.aspnet/https,如下所示:

    ln -s ~/ASP.NET/Https ~/.aspnet/https
    
  13. 创建一个符号链接,将~/Microsoft指向~/.microsoft,如下所示:

    ln -s ~/Microsoft ~/.microsoft
    
  14. 创建一个指向〜/ Microsoft / UserSecrets to〜/ .microsoft / usersecrets`的符号链接,如下所示:

    ln -s ~/Microsoft/UserSecrets ~/.microsoft/usersecrets
    

如果正确执行所有步骤,则Docker Compose将能够在Mac环境中解析Windows路径,找到所需的证书密码并正确运行解决方案。

结果是,您只需要提交.gitignore更改,以确保您的.env文件不会由于无意间影响其他人的错误而不会包含在存储库中-无需对文件进行进一步更改项目。

参考文献:

  1. Hosting ASP.NET Core Images with Docker over HTTPS
  2. Developing locally with ASP.NET Core under HTTPS, SSL, and Self-Signed Certs
  3. How to setup the dev certificate when using Docker in development

答案 1 :(得分:0)

如@Leonardo Braga所述,当您在Visual Studio for Mac中打开使用Visual Studio for Windows创建的项目时,会发生此问题

我已按照以下步骤在Visual Studio Mac上解决此问题:

  1. 请备份docker文件和docker compose项目,以确保安全。
  2. 从解决方案和相应项目中删除docker文件和docker compose项目。
  3. 通过右键单击项目并添加->添加Docker支持来重新生成docker文件和docker组成

对我来说,这是解决上述问题的最简单方法。