![](/img/trans.png)
[英]Regarding not getting GNU awk version after creating a docker basic container
[英]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.