docker - 从 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 脚本成功完成但主机上的文件夹为空:-(在我的理解中是什么但是容器中的构建文件夹也应该存在于主机上刚刚创建的构建文件夹中。
提前感谢您的帮助。
马丁
解决方案
好的,我终于找到了:
docker cp builder:/usr/src/myCppProject/build/*.elf 不起作用。看来您需要指定确切的名称。
推荐阅读
- zsh - Tmux 在每个命令上都要求输入 root 密码
- c# - 如何提供 `MapPath()` 方法的路径?
- flutter - Flutter:如何获取 json 嵌套 Map 方法
- c++ - 找不到
- python - 如何从 matplotlib 获取原始绘图图像数据?而不是保存到文件或显示
- spring - 在类路径资源和覆盖 bean 中定义的 bean 'methodSecurityInterceptor' 被禁用
- swift - 甚至在我的异步操作在 swift PromiseKit 中完成之前,Promise 就已经实现了
- java - OnScrollListener 在我的 RecyclerView 中不起作用 - AndroidX
- java - JPA:表中的重复标识符:尝试进行更新的字段
- javascript - 我有创建脚本来检查票号是否已经插入