Невозможно запустить файл сценария в докере, нет такого файла или каталога

Если файлы точно такие же, то их md5sum s будут точно такими же, поэтому вы можете использовать:

find A/ B/ -type f -exec md5sum {} + | sort | uniq -w32 -D

md5sum всегда точно 128 бит (или 16 байтов или 32 шестнадцатеричных цифры) long, а вывод программы md5sum использует шестнадцатеричные цифры. Поэтому мы используем параметр -w32 в команде uniq , чтобы сравнивать только первые 32 символа в каждой строке.

Это напечатает все файлы с неуникальной md5sum. т.е. дубликаты.

ПРИМЕЧАНИЕ: при этом будут обнаружены повторяющиеся файлы независимо от того, где они находятся в A / или B / - поэтому, если / A / subdir1 / file и A / subdir2 / otherfile являются то же самое, они все равно будут печататься. Если дубликатов несколько, все они будут напечатаны.

Вы можете удалить md5sums из вывода, подключив, например, к awk '{print $ 2}' или с помощью cut или sed и т. Д. I Я оставил их в выводе, потому что они являются полезным ключом для ассоциативного массива (также известного как «хэш») в awk или perl и т. д. для дальнейшей обработки.

9
25.03.2018, 20:50
3 ответа

Это, вероятно, окончание строк в стиле Windows -, которое нарушает его. Вот как выглядит файл, сохраненный с окончаниями строк Windows, но прочитанный в стиле Unix:

#!/bin/sh^M
^M
echo "hello world"^M 

При толковании шебанга (#! ), execувидит дополнительный возврат каретки (, обозначенный как CR, \r, ^M), и не найдет/bin/sh^M:

$ exec./setup.sh
bash: setup.sh: /bin/sh^M: bad interpreter: No such file or directory 

Сохраните файл с окончаниями строк в стиле Unix -. В Windows достойные текстовые редакторы (Sublime Text, Notepad++, любая IDE и т. д. )должны уметь это делать. Существует также простой инструмент командной строки -под названием dos2unix, который делает именно то, что вы от него ожидаете.

16
28.04.2021, 23:48

В изображении Alpine используется busybox, а в busybox нет оболочки, так как на самом деле он не предназначен для людей.

Для информации замените

CMD ["/setup.sh"]

по:

CMD /bin/busybox ls -al /bin

Вы получаете:

lrwxrwxrwx    1 root     root            12 Jan  9 19:37 ash -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 base64 -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 bbconfig -> /bin/busybox
-rwxr-xr-x    1 root     root        805024 Dec 12 10:42 busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 cat -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 chgrp -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 chmod -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 chown -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 conspy -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 cp -> /bin/busybox

[... snip...]

lrwxrwxrwx    1 root     root            12 Jan  9 19:37 tar -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 touch -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 true -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 umount -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 uname -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 usleep -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 watch -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 zcat -> /bin/busybox

Кроме того, если вы посмотрите на /libтаким же образом, вы обнаружите, что обычных библиотек там нет, поскольку busyboxиспользует muslвместо glibc.

Как правило, все, что делается в вашем setup.sh, все равно должно выполняться с RUNинструкциями в Dockerfile?

PS :Кстати,

standard_init_linux.go:195: exec user process caused "no such file or directory"

означает, что либо исполняемый файл не найден, либо не найдена одна из необходимых для него библиотек, что сильно затрудняет отладку Dockerfile.

3
28.04.2021, 23:48

Следует использовать окончание строк в стиле Unix -вместо Windows. Эта проблема возникает и у меня в Windows 10.

Вы должны выполнить следующую команду перед клонированием репозитория:

git config --global core.autocrlf false

Затем клонируйте репозиторий и продолжайте.

1
28.04.2021, 23:48

Теги

Похожие вопросы