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

问题描述 投票:3回答:1

使用docker-compose up on macOS获得以下错误 -

/ 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 \ n不会从OS X共享,并且Docker不知道。\ r \ n您可以从Docker配置共享路径 - >首选项... - >文件共享。\ 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 \ n路径/ Microsoft / UserSecrets和/ASP.NET/Https \ rnn不从OS X共享且不知道Docker。\ r \ n您可以从Docker配置共享路径 - >首选项... - >文件共享。\ r \ n请参阅https://docs.docker.com/docker-for-mac/osxfs/#namespaces以获取更多信息。\ r \ n。错误:对于xyz无法启动服务xyz:b'Mounts被拒绝:\ r \ n路径/ Microsoft / UserSecrets和/ASP.NET/Https \ rnn不从OS X共享,并且Docker不知道。\ r \ n您是可以从Docker配置共享路径 - >首选项... - >文件共享。\ r \ n请参阅https://docs.docker.com/docker-for-mac/osxfs/#namespaces以获取更多信息。\ r \ n。'错误:对于xyz无法启动服务xyz:b'Mounts被拒绝:\ r \ n路径/ Microsoft / UserSecrets和/ASP.NET/Https \ rnn不从OS X共享,并且Docker不知道。\ r \ n您是可以从Docker配置共享路径 - >首选项... - >文件共享。\ r \ n请参阅https://docs.docker.com/docker-for-mac/osxfs/#namespaces以获取更多信息。\ r \ n。'在启动项目时遇到错误..

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

.net docker docker-compose docker-for-mac
1个回答
5
投票

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

  1. 检查文件夹~/.aspnet/https是否存在。如果是,请跳到步骤5。
  2. 创建文件夹结构~./asp.net/https
  3. 运行以下命令以安装允许您通过HTTPS访问localhost的开发证书。更多细节heredotnet dev-certs https --trust
  4. 运行以下命令以导出开发证书。记下密码,稍后您将需要它: dotnet dev-certs https -ep ${HOME}/.aspnet/https/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 = /用户/ 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 / UserSecretsto~ / .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
© www.soinside.com 2019 - 2024. All rights reserved.