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

use*_*524 3 .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重新创建886c8806b528_dockercompose9508177338158005990_xyz_1 ...重新创建57afcf6f0cb0_dockercompose9508177338158005990_xyz_1 ......重新创建886c8806b528_dockercompose9508177338158005990_xyz_1 ...错误错误:886c8806b528_dockercompose9508177338158005990_xyz_1无法启动服务XYZ:b'Mounts否认:\ r \ n此路径/微软/ UserSecrets和/ ASP .NET / Https \ r \ nare不与OS X共享,Docker不知道。https://docs.docker.com/docker-for-mac/osxfs/#namespaces了解更多信息。\ r \ n。正在重新创建57afcf6f0cb0_dockercompose9508177338158158005990_xyz_1 ...错误ERROR:57afcf6f0cb0_dockercompose9508177338158155990_xyz_1无法启动服务xyz:b'安装被拒绝:\ r \ n不知道/ Microsoft / UserSecrets和/ASP.NET/Https的路径/ Microsoft / UserSecrets和/ r \ n不共享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配置共享路径。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)

Leo*_*aga 8

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

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

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

  3. 运行以下命令以安装允许您localhost通过HTTPS 访问的开发证书。更多细节在这里。

    dotnet dev-certs https --trust
    
    Run Code Online (Sandbox Code Playgroud)
  4. 运行以下命令以导出开发证书。记下密码,以后将需要它:

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

  6. 获取您正在构建的Web应用程序的程序集的用户密钥ID。通常位于名为like的文件中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>"
          }
        }
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  9. .env在解决方案内部的Docker Compose配置文件所在的文件夹中创建一个名称为以下内容的文件:

    APPDATA = /用户/ 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〜/ .aspnet / https〜/ ASP.NET / 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文件不会被误认为会无意中影响其他人的文件存储在仓库中,因此无需对该项目进行进一步更改。

在2019年8月4日进行编辑:一些符号链接创建参数的顺序相反。非常感谢@BRBdot指出了这一点。

参考文献:

  1. 通过HTTPS与Docker托管ASP.NET Core映像
  2. 在HTTPS,SSL和自签名证书下使用ASP.NET Core在本地进行开发
  3. 在开发中使用Docker时如何设置开发证书

  • @Leonardo,只是当我将它与:“$ ln -s &lt;SOURCE&gt; &lt;LINK_NAME&gt;”进行比较时,你的路径对我来说看起来不正确。它们应该类似于 `$ ln -s /path/to/dir /path/to/symlink`,但是以: ```13 创建一个符号链接以将 ~/Microsoft 指向 ~/.microsoft,如下所示: ln - s ~/Microsoft ~/.microsoft``` 这里的符号链接应该是 ~/Microsoft 而不是 ~/.microsoft,因为后者是一个实际的隐藏文件夹。那有意义吗?我认为应该是 ln -s ~/.microsoft ~/Microsoft. 除非你被说服,否则我不想改变。 (2认同)