以下帖子太长,请耐心看完
嗨,我对 docker 和 dds 还很陌生。
我正在使用 rti-dds 和 docker 创建一个简单的代码。
该代码将为我提供两个执行程序,一个用于发布数据,另一个用于订阅数据。
我想在我的 Dockerfile 中从头开始使用,因为我不需要 bash 也不需要任何操作系统。
现在,如果我从头开始使用,我是否需要使用 g++ -static 标志静态构建我的 exes,或者可以动态完成,即没有静态标志。
哪一个是首选,或者有什么规则吗?
Docker版本
客户端:Docker 引擎 - 社区
版本:19.03.2
API版本:1.40
Go版本:go1.12.8
Git 提交:6a30dfc
建成时间:2019 年 8 月 29 日星期四 05:29:11
操作系统/架构:linux/amd64
实验:假
使用 -static 标志构建 exe 文件时的 Dockerfile
FROM scratch
COPY rti_license.dat /
COPY USER_QOS_PROFILES.xml /
COPY /objs/x64Linux3gcc4.8.2/DynamicTest_publisher /
COPY /objs/x64Linux3gcc4.8.2/DynamicTest_subscriber /
CMD ["/DynamicTest_publisher"]
docker 镜像已成功构建并运行,没有任何错误
BUT
动态构建 exe 文件时的 Dockerfile(没有静态标志)
计算所有依赖项也将被复制
使用检查依赖关系
exe 上的 ldd
FROM scratch
COPY rti_license.dat /
COPY USER_QOS_PROFILES.xml /
COPY /lib/x86_64-linux-gnu/libdl.so.2 /
COPY /lib/x86_64-linux-gnu/libnsl.so.1 /
COPY /lib/x86_64-linux-gnu/libpthread.so.0 /
COPY /lib/x86_64-linux-gnu/librt.so.1 /
COPY /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /
COPY /lib/x86_64-linux-gnu/libc.so.6 /
COPY /lib/x86_64-linux-gnu/libgcc_s.so.1 /
COPY /objs/x64Linux3gcc4.8.2/DynamicTest_publisher /
COPY /objs/x64Linux3gcc4.8.2/DynamicTest_subscriber /
COPY /lib64/ld-linux-x86-64.so.2 /
CMD ["/DynamicTest_publisher"]
构建docker镜像
docker build --tag dynamictest .
但是当我尝试运行这个时,我收到以下错误
docker run --rm -it dynamictest
Error
standard_init_linux.go:211: exec 用户进程导致“没有这样的文件或目录
那么,我在这里遗漏了一些东西还是“从头开始仅适用于静态构建”