在AWS CDK(C#)部署中构建子目录Dockerfile的问题
AWS CDK(C#)构建Visual Studio Dockerfile的上下文冲突解决
正确配置方案
要让CDK适配Visual Studio Dockerfile对上下文目录的要求,同时正确定位Dockerfile,你需要按以下逻辑配置DockerImageAsset:
var dockerImage = new DockerImageAsset(this, "AppImage", new DockerImageAssetProps { // 指定Docker构建上下文为解决方案根目录(相对于CDK项目目录的上级目录) Directory = "../", // 指定Dockerfile相对于解决方案根目录的完整路径 File = "src/my-proj-folder/Dockerfile" });
你之前配置报错的原因
DockerImageAsset的Directory参数定义的是Docker构建的上下文目录,File参数是相对于该上下文目录的Dockerfile路径。你之前设置Directory = "src/",此时CDK会在src/目录下查找./my-proj-folder/Dockerfile,如果你的Dockerfile实际不在这个层级(而是在解决方案根目录下的项目文件夹中),就会出现文件找不到的错误。
可选优化(缩小构建上下文)
如果解决方案目录包含大量无关文件,不想把整个目录作为Docker构建上下文,可以修改Visual Studio生成的Dockerfile中的COPY指令,将路径调整为基于Dockerfile所在目录的相对路径,然后将Directory设为Dockerfile所在的项目目录:
var dockerImage = new DockerImageAsset(this, "AppImage", new DockerImageAssetProps { Directory = "../src/my-proj-folder", File = "Dockerfile" });
Dockerfile修改示例(适配新的上下文):
# 原VS生成指令(基于解决方案根目录上下文) COPY ["MyProject/MyProject.csproj", "MyProject/"] # 修改后(基于项目目录上下文) COPY ["MyProject.csproj", "."]
内容的提问来源于stack exchange,提问作者Chris Rice
相关产品推荐
相关产品推荐

