我想在存储库中的本地文件经过AWS CDK的自定义Docker映像处理后上传到s3。我不想公开Docker映像(这不是一个很大的限制)。此外,我不想为每个s3部署构建映像
因为我不想为每个bucket部署构建docker映像,所以我创建了一个DockerImageAsset
,并尝试给予映像uri作为BucketDeployment
的bundle属性。
const image = new DockerImageAsset(this, "cv-builder-image", {
directory: join(__dirname, "../"),
});
new BucketDeployment(this, "bucket-deployment", {
destinationBucket: bucket,
sources: [
Source.asset(join(__dirname, "../"), {
bundling: {
image: DockerImage.fromRegistry(image.imageUri),
command: [
"bash",
"-c",
'echo "heloo" >> /asset-input/cv.html && cp /asset-input/cv.html /asset-output/cv.html',
],
},
}),
],
});
DockerImageAsset
部署正常,但在BucketDeployment
部署期间抛出此问题
docker: invalid reference format: repository name must be lowercase
我可以看到映像正在部署到AWS。
任何帮助我都感激不尽。祝你一天愉快
2条答案
按热度按时间oxiaedzo1#
据我所知--简单地说--您有一个Docker映像,用于启动一个实用工具容器,该容器只接收一个文件并输出一个工件(另一个文件)。
然后,您希望使用BucketDeployment构造将工件上载到S3。
这是一个常见的问题,当处理编译应用程序,如Java到.jar工件或前端应用程序(React,Angular )到静态输出(HTML,CSS,JS)文件。
我过去处理这个问题的方法是:将工件生成拆分为管道中的一个单独步骤,然后触发“cdkdeploy”作为后续步骤。
你会有更少的头痛和你控制过程的所有部分,包括访问低级别的Docker命令,如
docker build ...
和docker run ...
,并在效果上,利用本地层缓存在最好的可能的方式。如果你依靠CDK为您做捆绑-有一点魔术背后的场景并不总是显而易见的。我不是说这是不可能的,只是更多的“工作”。mccptt672#
这可以在不使用DockerImageAsset的情况下完成。在这种情况下,
Dockerfile
存储在../src/app1
中。以下是示例Docker图像