c - 在 C 程序中构建 docker 镜像
问题描述
我通过套接字发送一个 Dockerfile 和一个 .c 文件。我正在尝试使用以下命令在 C 程序中构建图像:
system("docker build -t my_image .")
但是当它开始构建图像时,我得到以下输出:
Step 1/6 : FROM gcc:4.9
---> 1b3de68a7ff8
Step 2/6 : COPY . /home/server/src
---> 3ad55a5751dd
Step 3/6 : WORKDIR /home/server/src
---> Running in 8d768eda43ee
Removing intermediate container 8d768eda43ee
---> bf9a9ff0273b
Step 4/6 : EXPOSE 9000
---> Running in 75c48b8aa200
Removing intermediate container 75c48b8aa200
---> b38c514453e0
Step 5/6 : RUN gcc ./rand_gen_server.c -o server_side
---> Running in b4486ecd8451
/usr/lib/x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
The command '/bin/sh -c gcc ./rand_gen_server.c -o server_side' returned a non-zero code: 1
直接在 cmd 中构建时,一切正常。我正在使用sudo
.
有任何想法吗?
解决方案
@ForceBru 和 @Rudi 的结合帮助了我。由于 Dockerfile 是从套接字获得的,因此我必须将COPY
和WORKDIR
路径替换为与新主机对应的路径。
另外,我将步骤 5/6 更改为gcc -c /rand_gen_server.c -o server_side
.
让我们看看其余的努力是否会奏效。
UPDATE
结果证明,在编译期间,我无法编译另一个 .c 文件。为了做到这一点,我必须创建一个新流程。使用该函数fork()
和执行系统调用来构建 docker 映像就可以完成这项工作。-c
另外,我在编译期间没有使用该选项。
推荐阅读
- vim - Vim 自动完成功能无法使用组合键
- python - 如何修复 ValueError?
- c++ - noexcept + declval 在 MSVC 下编译失败
- c - 检查 sqlite3 表列是否已填充
- flutter - 如何在同步融合条形图中放置自定义形状的条形图,颤动?
- python - 无法覆盖 Django 3.0 中的管理模板
- php - 如何在 Docker php 映像中安装 pdo_odbc
- arrays - 如何使用 Swift 更新数组中所有元素的特定属性值
- angular - 从 Angular 8 升级到 Angular 9 - 错误
- python - 在peewee中跨多个数据库使用多个M2M关系