繁体   English   中英

GNU make 创建 Docker 容器并使用 Image id

[英]GNU make creating Docker container and using Image id

我正在尝试创建一个配方,它将在我的 docker 容器内执行我的 lint 结果,并将results.xml复制到容器外。xml。 这是我的食谱:

lint-results:
    docker build --target lint path_to_my_src_dir -t $(my_lint_image_tag)
    $(eval tmp_lint_container_id:=$(shell docker create $(my_lint_image_tag))) # This step seems to execute too quick
    @echo my lint constainer id is $(tmp_lint_container_id)
    docker cp $(tmp_lint_container_id):/usr/src/app/results.xml ./
    docker rm -v $(tmp_lint_container_id)

我遇到的问题是在它从 docker 构建成功创建$(my_lint_image_tag)并继续创建容器之后。 第一次出现错误, $(tmp_lint_container_id)的回显 output 是空白的,但如果我再次运行它,它就可以工作。 它似乎只是第一次失败,如果最初,图像不存在,几乎就像它在 docker 图像构建后快速运行shell命令一样。

如果 output 的错误,这里是一个片段:

Removing intermediate container a6f4eb8ac404
 ---> 01cb85644929
Successfully built 01cb85644929
Successfully tagged my-lint-image-1.1.1.1:latest
my lint constainer id is
docker cp :/usr/src/app/results.xml ./
must specify at least one container source
make: *** [lint-results] Error 1

在运行shell命令之前,有没有办法确保 docker 图像存在?

专业提示 #1:如果您在配方中使用$(eval..)$(shell...) ,您几乎总是会做错事。

使用 shell 变量而不是 make 变量来保存配方中的值。 像这样:

lint-results:
        docker build --target lint path_to_my_src_dir -t $(my_lint_image_tag)
        tmp_lint_container_id=$$(docker create $(my_lint_image_tag)) && \
        docker cp $$tmp_lint_container_id:/usr/src/app/results.xml ./ && \
        docker rm -v $$tmp_lint_container_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM