Docker: standard_init_linux.go: 211: пользовательский процесс exec вызвал "нет такого файла или каталога" - PullRequest
1 голос
/ 01 июля 2019

Я пытаюсь создать базовый образ, следуя инструкциям, приведенным на официальной странице докера (https://docs.docker.com/samples/library/scratch/)

    docker --version
    Docker version 18.09.6, build 481bc77

    OS Details:
    NAME="Ubuntu"
    VERSION="18.04.2 LTS (Bionic Beaver)"

DockerFile:

    FROM scratch
    COPY hello /
    CMD ["/hello"]

hello.c

    #include <stdio.h>
        int main()
        {
           // printf() displays the string inside quotation
           printf("Hello, World!");
           return 0;
        }

Я могу скомпилировать программу C и выполнить ее локально

Я могу построить образ с помощью файла dockerfile, но когда я пытаюсь запустить контейнер, я получаю следующую ошибку:

    # docker run -i hello
        standard_init_linux.go:211: exec user process caused "no such file or directory" 
    #

Я ожидаю, что контейнер запустится успешно, и на консоли выведет «Hello World». В большинстве ответов предлагается изменить EOL, что неприменимо, поскольку мы уже работаем в Linux, и не пытаемся запустить скрипт.

1 Ответ

1 голос
/ 01 июля 2019

Полагаю, вы получаете эту ошибку, потому что вы создали динамически связанный двоичный файл, например:

$ gcc -o hello hello.c
$ ldd hello
    linux-vdso.so.1 (0x00007ffe3b1ec000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7fe1fc7000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f7fe25ba000)

scratch действительно базовый, в котором не так много so для вашего двоичного файла в динамическийссылка на сайт.Итак, вам необходимо создать двоичный файл статической ссылки, например:

$ gcc -o hello -static hello.c
$ ldd hello
    not a dynamic executable

Затем все будет работать следующим образом:

$ docker build -t hello .
Sending build context to Docker daemon  848.4kB
Step 1/3 : FROM scratch
 --->
Step 2/3 : COPY hello /
 ---> 9d594b34f774
Step 3/3 : CMD ["/hello"]
 ---> Using cache
 ---> 2f1bad3099d3
Successfully built 2f1bad3099d3
Successfully tagged hello:latest
$ docker run -i hello
Hello, World!

И, если вы не используете scratch образ, который имеет больше .so в системе, тогда вам не нужно создавать статический двоичный файл.

...