这可能有点长,但我认为很容易阅读...那么我们开始吧...
我使用IoT Edge工具创建了一个物联网边缘解决方案。 它生成的Dockerfile非常适用于没有外部DLL依赖项的项目。
当我在此模块(MyEdgeModule
)中添加多个DLL(MySqlAdapter
、BaseAdapter
、Helper
)时,不更改Dockerfile尝试构建图像时,问题就出现了。
它会抛出一个错误:
跳过项目“/MySqlAdapter/MySqlAdapter.csproj”,因为未找到该项目。 跳过项目“/MySqlAdapter/MySqlAdapter.csproj”,因为未找到该项目。
...
... : 警告 : 引用的项目 '../MySqlAdapter/MySqlAdapter.csproj' 不存在。[/app/MyEdgeModule.csproj]
以下是 MyEdgeModule
生成的 Dockerfile。
FROM microsoft/dotnet:2.1-sdk AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
FROM microsoft/dotnet:2.1-runtime-stretch-slim
WORKDIR /app
COPY --from=build-env /app/out ./
RUN useradd -ms /bin/bash moduleuser
USER moduleuser
ENTRYPOINT ["dotnet", "MyEdgeModule.dll"]
这些类库项目位于 Dockerfile 的 "../{projname}/*.csproj" 处。
因此,我尝试将这些项目相对地添加到 Dockerfile 中,以便查看是否可以工作,但没有成功。
我甚至从 documentation 上了解到:
引用: 路径必须在构建的上下文中;您不能复制 ../something /something,因为 docker build 的第一步是将上下文目录(及其子目录)发送到 docker 守护程序。
据我所知,我的
context
是我试图返回查找依赖项目的文件夹,这似乎是不可能的。如何为此项目创建镜像,假设它有几十个外部 DLL 作为依赖项?