docker build build-args 在 buildspec.yml 文件中包含空格不起作用

docker build build-args containing spaces in a buildspec.yml file doesn't work

我们正在使用 CodeBuild AWS 服务,它使用 buildspec.yml 文件在构建的不同阶段(pre_build、构建、post_build 等)执行一些命令。我想要一个全局 buildspec.yml 文件,感谢 CodeBuild 中的环境变量,可以对其进行编辑。因此,例如,我们传递环境类型(暂存、预生产、生产...等)、要执行的命令、S3 存储桶和其他。

在这个文件中,我创建了一个 docker 图像,所以我使用 docker 构建,我标记我的图像,添加要传递给 Dockerfile 的参数,并指定 Dockerfile 路径。

使用此命令:

docker build -t ABC:v1 --build-arg LAUNCH_COMMAND=${LAUNCH_COMMAND} -f ${DOCKERFILE_PATH} .

为了具体说明,我使用 build-arg 传递命令来启动我们的应用程序(这在环境之间是不一样的)。第一个通过的是LAUNCH_COMMAND,也就是Dockerfile中的变量名,第二个${}语法的是AWS CodeBuild的环境变量

问题是,我的启动命令包含 spaces。

这是我尝试过的:

带有 spaces 的 CodeBuild 变量:KO

直接在 docker 构建命令中使用 spaces 并用引号括起来:KO

我后来发现,根据这个 ,我们需要转义变量以在 Dockerfile 获取它们时保留 spaces。

CodeBuild 变量 spaces 转义:KO

直接在 docker 构建命令中写入 spaces 转义并用引号括起来:OK

通过在 CodeBuild 环境中进行回显,space 以及转义字符得以保留。所以问题似乎是当 CodeBuild 将变量传递给 docker build.

我在构建中收到的错误消息是:

正如@AymDev 在评论中所述,它通过在 buildspec.yml 文件中的 CodeBuild 环境变量周围添加引号来工作。

这意味着做这样的事情:

docker build -t ABC:v1 --build-arg LAUNCH_COMMAND="${LAUNCH_COMMAND}" -f ${DOCKERFILE_PATH} .