GNU make 创建 Docker 容器并使用图像 ID
GNU make creating Docker container and using Image id
我正在尝试创建一个配方,它将在我的 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
有没有办法确保 docker 图像在 shell
命令 运行 之前存在?
专业提示 #1:如果您在食谱中使用 $(eval ..)
或 $(shell ...)
,您几乎总是会做错事。
使用 shell 变量,而不是创建变量,来保存配方中的值。像这样:
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
我正在尝试创建一个配方,它将在我的 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
有没有办法确保 docker 图像在 shell
命令 运行 之前存在?
专业提示 #1:如果您在食谱中使用 $(eval ..)
或 $(shell ...)
,您几乎总是会做错事。
使用 shell 变量,而不是创建变量,来保存配方中的值。像这样:
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