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 в контейнере работающем на образе полученном из двухэтапной сборки???


Ответы (0 шт):