docker: Error response from daemon: failed to create task for container: failed to create shim task:
Изучаю Docker. Дошел до этой главы. Для понимания происходящего решил уменьшить размер уже своего образа с помощью многоэтапной сборки. Ничего проще чем вывести в консоль hello на языке Си не знаю.
Вот вариант без уменьшения размера образа(одноэтапная сборка).
Написал код:
#include <stdio.h>
int main() {
printf("hello\n");
return 0;
}
Мой Dockerfile
# syntax=docker/dockerfile:1
FROM ubuntu
WORKDIR /
RUN apt-get update
RUN apt-get install -y gcc
COPY start.c .
RUN gcc start.c
ENTRYPOINT ./a.out
Собираю образ
sudo docker build --tag=q1 .
Сборка проходит успешно.
Запускаю контейнер
sudo docker run --rm -it q1
получаю
hello
Тут все работает.
Теперь вариант с уменьшением размера образа(двухэтапная сборка).
Мой Dockerfile
# syntax=docker/dockerfile:1
FROM ubuntu
WORKDIR /
RUN apt-get update
RUN apt-get install -y gcc
COPY start.c .
RUN gcc start.c
FROM scratch
COPY --from=0 /a.out /
ENTRYPOINT ./a.out
Собираю образ
sudo docker build --tag=q2 .
Сборка проходит успешно.
Запускаю контейнер
sudo docker run --rm -it q2 /bin/sh
получаю
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/bin/sh": stat /bin/sh: no such file or directory: unknown.
В первом случае как бы понятно что есть все реобходимое учитывая размер образа. Во втором вроде не хватает /bin/sh, но как его получить в образе с двухэтапной сборкой неясно.
Вопрос: Как запустить a.out в контейнере работающем на образе полученном из двухэтапной сборки???