В Dockerfile g cc не может найти клонированный каталог - PullRequest
0 голосов
/ 05 марта 2020

У меня есть простой Dockerfile, который делает git clone, а затем cc внутри недавно клонированного каталога. К сожалению, cc завершается с ошибкой, что файл. c не может быть найден.

FROM gcc:4.9.4

CMD mdkir -p /usr/src \
    cd /usr/src \
    git clone https://github.com/<repo>/helloworld.git
WORKDIR /usr/src/helloworld
RUN cc -o helloworld -03 -march=native -lm helloworld.c
ENTRYPOINT["./helloworld"]

Похоже, ошибка указывает на то, что либо клон не произошел, либо я нахожусь не в том каталоге когда я запускаю cc.

$ docker build -t helloworld ./
Sending build context to Docker daemon 2.048 kB
Step 1/5 : FROM gcc:4.9.4
 ---> 1b3de68a7ff8
Step 2/5 : CMD mkdir -p /usr/src     cd /usr/src     git clone https://github.com/<repo>/helloworld.git /usr/src/helloworld
 ---> Using cache
 ---> b46c44b63d60
Step 3/5 : WORKDIR /usr/src/helloworld
 ---> Using cache
 ---> 11f02812a9e6
Step 4/5 : RUN cc -o helloworld -O3 -march=native -lm helloworld.c
 ---> Running in 784960f375d7

cc: error: helloworld.c: No such file or directory
The command '/bin/sh -c cc -o helloworld -O3 -march=native -lm helloworld.c' returned a non-zero code: 1

Выполнение каждого шага внутри docker run --rm -it gcc:4.9.4 /bin/bash работает нормально. Какое предположение я делаю неправильно?

1 Ответ

0 голосов
/ 05 марта 2020

При использовании git используйте RUN, а не CMD. Следовательно, более простой и понятный способ написания Dockerfile заключается в следующем:

FROM gcc:4.9.4

RUN git clone https://github.com/<repo>/helloworld.git /usr/src/helloworld
WORKDIR /usr/src/helloworld
RUN cc -o helloworld -03 -march=native -lm helloworld.c
ENTRYPOINT["./helloworld"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...