GNU创建Docker容器并使用Image id

问题描述 投票:0回答:1

我正在尝试创建一个配方,该配方将在docker容器内执行我的lint结果,并在容器外复制results.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)的回显输出为空白,但是如果再次运行它,它将起作用。它似乎仅在第一次出现故障时才出现,如果最初不存在该映像,几乎就像在构建docker映像后迅速运行shell命令一样。

如果出现错误,则显示摘录:

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映像在其中?

docker makefile gnu
1个回答
0
投票

专业提示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
© www.soinside.com 2019 - 2024. All rights reserved.