Alpine Image standard_init_linux.go: 207: пользовательский процесс exec не вызвал такого файла или каталога

Я пытаюсь запустить контейнер на базе alpine, который при запуске будет запускать программу hello world на C ++. Однако при запуске контейнера появляется standard_init_linux.go:207: exec user process caused "no such file or directory" ошибка.

Я сделал ls -al в контейнере, чтобы проверить, существует ли файл с правильными разрешениями. Исполняемый файл (с именем test) существует в корневом каталоге с правами -rwxrwxr-x.

Это мой Dockerfile.

FROM alpine:latest
ADD test /
ENTRYPOINT ["/test"]

Может ли кто-нибудь помочь мне определить, в чем проблема? Спасибо !

Изменить: я скомпилировал свой файл .cpp в Ubuntu 18.04 для создания исполняемого файла. g++ -o test test.cpp

test.cpp:

#include <iostream>

using namespace std;

int main()
{
   cout<<"Hello World"<<endl;
   return 0;
}

person LM10    schedule 12.08.2019    source источник
comment
Что такое test? Как ты это создал? Предоставьте минимальный воспроизводимый пример   -  person Alan Birtles    schedule 12.08.2019
comment
Извините, я добавил правку, чтобы воспроизвести ошибку. Пожалуйста, посмотрите.   -  person LM10    schedule 12.08.2019


Ответы (1)


Скорее всего, потому что вы создаете test двоичный файл в операционной системе, отличной от alpine, а затем пытаетесь запустить его в alpine.

Например. Если вы проверите зависимость своего двоичного файла, вы можете найти следующее (это может отличаться в зависимости от вашей системы):

$ ldd test
linux-vdso.so.1
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2

Но в alpine он не использует glibc, он использует musl libc.

Поэтому предлагаем вам построить его напрямую в alpine или для простого применения используйте следующее:

g++ -o test -static test.cpp
person atline    schedule 12.08.2019