Построить образ докера в C-программе - PullRequest
0 голосов
/ 07 февраля 2019

Я посылаю через сокет 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, все работает.Я запускаю программу на C, используя sudo.

Есть идеи?

1 Ответ

0 голосов
/ 07 февраля 2019

Мне помогает комбинация @ForceBru и @Rudi.Поскольку Dockerfile был получен из сокета, мне пришлось заменить пути COPY и WORKDIR на пути, соответствующие новому хосту.

Кроме того, я изменил шаг 5/6 на gcc -c /rand_gen_server.c -o server_side.

Давайте посмотрим, будут ли работать остальные попытки.

ОБНОВЛЕНИЕ Оказывается, во время компиляции я не могу скомпилировать другой файл .c.Для этого мне нужно создать новый процесс.Использование функции fork() и выполнение системного вызова для построения образа докера сделали свою работу.Кроме того, я не использовал опцию -c во время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...