在 RHEL - .NET Core 上拒绝访问 project.lock.json

Access to project.lock.json is denied on RHEL - .NET Core

我刚开始按照 Red Hat 提供的一些说明在 RHEL 7 上使用 .NET Core 和 Docker。

我使用 dotnet new -t web 创建了一个 .NET 核心 MVC 应用程序,然后在该文件夹中创建了我的 Dockerfile,内容如下:

FROM registry.access.redhat.com/dotnet/dotnetcore-11-rhel7
ADD . /opt/app-root/src/
WORKDIR /opt/app-root/src/
EXPOSE 5000
RUN ["/bin/bash", "-c", "/opt/rh/rh-dotnetcore11/root/usr/bin/dotnet restore"]
RUN ["/bin/bash", "-c", "/opt/rh/rh-dotnetcore11/root/usr/bin/dotnet build"]
CMD ["/bin/bash", "-c", "/opt/rh/rh-dotnetcore11/root/usr/bin/dotnet run"]

然后我尝试通过 运行ning

构建 Docker 图像
docker build -t mvc_docker

其中 mvc_docker 既是我在 运行 docker build 命令时所在的文件夹的名称,也是我要创建的图像的名称。

dotnet restore 期间一切看起来都很好,但后来我在控制台中收到此错误:

error: Access to the path '/opt/app-root/src/project.lock.json' is denied.

我的 RHEL VM 的 /opt 目录中目前没有 app-root 目录 - 我是否需要手动创建一个目录,或者我应该期望 Docker 创建任何目录在Dockerfile?

中指定的目标目录路径

更新:所以我手动创建了/opt/app-root/src路径但仍然得到同样的错误,当我在src文件夹中ls -la时没有文件。

我的Docker文件内容不正确吗?我可以 运行 dotnet restore 从我的项目文件夹中的 bash 提示,它成功完成但也说

Lock file has not changed. Skipping lock file write.

但这是我项目文件夹中的锁定文件,而不是 /opt 中目标文件夹中的任何文件。

我通过在 运行 我的 docker build 命令之前删除它来设法绕过与 project.lock.json 相关的错误。
这样做使 dotnet restore 成功完成。

遗憾的是,我现在又遇到了另一个错误,但那是针对另一个问题的。

您引用的 .NET Core 映像是使用我们的源到映像工具构建的,因此您最好的选择是使用它。

你这样安装:

sudo yum install source-to-image

然后,进入你的ASP.NET核心项目的根目录(包含project.json)并使用s2i命令构建一个docker镜像。

s2i build . registry.access.redhat.com/dotnet/dotnetcore-11-rhel7 myweb-dotnetcore-app

和 运行 新创建的名为 myweb-dotnetcore-app 的图像使用:

docker run -p 8080:8080 myweb-dotnetcore-app

您可能需要更改端口以满足您的需要。