首页 > 解决方案 > 从 docker 容器中导出构建文件

问题描述

我有一个构建 ac/c++ 嵌入式项目并创建构建工件的 docker 映像。我编写了一个 shell 脚本,它使用 docker 映像构建代码。它旨在由用户在他的机器上启动以进行调试。构建过程工作正常并且文件已创建,但我无法将它们导出到主机进行调试。我收到错误:

错误:没有这样的容器:路径:builder:/usr/src/myCppProject/build/*.elf

这是我的脚本:

#!/bin/bash
echo "Building docker image" 
docker build --tag my-gcc:1.0 .
echo "Running docker container"
docker run -t -d --name builder --privileged my-gcc:1.0
echo "extracting artifacts" 
docker cp builder:/usr/src/myCppProject/build/*.elf .
echo "Removing container" 
docker stop builder
docker rm builder
echo "Cleaning up" 
docker rmi $(docker images -f "dangling=true" -q)

详细的输出是:

...
/usr/src/myCppProject/LIBS/Shell/shell.h:80:76: warning: missing braces around initializer [-Wmissing-braces]
   80 |         sConsoleCMD_td s##name  __attribute__ ((section(".shell_cmds"))) = {"MAGIC", (uint8_t*)#name, (uint8_t*)basic_desciption, (uint8_t*)detailed_description, (uint32_t)param_count, false, 0, CallBack, {0,0}}
      |                                                                            ^
/usr/src/myCppProject/APPS/main.c:32:1: note: in expansion of macro 'CON_CREATE_CMD'
   32 | CON_CREATE_CMD(test, "test", "", 1, NULL);
      | ^~~~~~~~~~~~~~
[100%] Linking C executable Testbench.elf
   text    data     bss     dec     hex filename
  25536    2044    7680   35260    89bc Testbench.elf
[100%] Built target Testbench.elf
Removing intermediate container 3d4a78e05b33
 ---> 8f2bfcfd19d7
Step 16/17 : WORKDIR /usr/src/myCppProject/build
 ---> Running in fd30a67e6d93
Removing intermediate container fd30a67e6d93
 ---> 5f0104d0b1e7
Step 17/17 : RUN ls
 ---> Running in 6096737dd094
CMakeCache.txt
CMakeFiles
Makefile
Testbench.bin
Testbench.elf
Testbench.hex
Testbench.map
cmake_install.cmake
Removing intermediate container 6096737dd094
 ---> 3624660a131b
Successfully built 3624660a131b
Successfully tagged my-gcc:1.0
Running docker container
4a31aee944118084602841f51b317df21b49d831345d78e652e36a3b2dfd1801
extracting artifacts
Error: No such container:path: builder:/usr/src/myCppProject/build/*.elf
Removing container
builder
...

在调用时尝试使用卷更糟糕:

mkdir build docker run --name builder --privileged -v /build:/usr/src/myCppProject/build my-gcc:1.0 脚本成功完成但主机上的文件夹为空:-(在我的理解中是什么但是容器中的构建文件夹也应该存在于主机上刚刚创建的构建文件夹中。

提前感谢您的帮助。

马丁

标签: dockershellcopyartifacts

解决方案


好的,我终于找到了:

docker cp builder:/usr/src/myCppProject/build/*.elf 不起作用。看来您需要指定确切的名称。


推荐阅读