gne*_*ric 6 c# docker dockerfile azure-iot-edge
它可能有点长,但我认为它很容易阅读......所以让我们开始......
我有一个使用IoT Edge Tools创建的 IoT-Edge 解决方案。它生成一个 Dockerfile,该文件非常适合没有外部 DLL 作为依赖项的项目。
当我在这个模块 ( ) 中添加多个 DLL ( MySqlAdapter
, BaseAdapter
, ) 时,问题就出现了,而在尝试构建镜像时没有更改 Dockerfile,Helper
MyEdgeModule
它抛出一个错误:
正在跳过项目“/MySqlAdapter/MySqlAdapter.csproj”,因为找不到它。正在跳过项目“/MySqlAdapter/MySqlAdapter.csproj”,因为找不到它。
...
...:警告:引用的项目“../MySqlAdapter/MySqlAdapter.csproj”不存在。[/app/MyEdgeModule.csproj]
这是生成的 DockerfileMyEdgeModule
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"]
Run Code Online (Sandbox Code Playgroud)
这些类库项目位于 Dockerfile 中的“../{projname}/*.csproj”。
因此,我尝试将这些项目分别添加到 Dockerfile 中,看看是否能正常工作,但没有成功。
我什至从文档中了解到这一点:
该路径必须位于构建的上下文内;你不能 COPY ../something /something,因为 docker 构建的第一步是将上下文目录(和子目录)发送到 docker 守护进程。
据我了解, mycontext
是我尝试返回的文件夹,以找到我的依赖项项目,这似乎是不可能的。
假设该项目有数十个外部 DLL 作为依赖项,如何为该项目创建映像?
现在有效的方法是创建一个新的 .NET Core 项目并使用 .NET Core 项目Add Docker Support
,每次生成它时,它都会使用引用中的所有依赖项刷新它的 Dockerfile。
为了工作,需要将 Dockerfile 移动到解决方案目录,而不是生成它的项目文件夹。
归档时间: |
|
查看次数: |
3447 次 |
最近记录: |