Не удалось выполнить stat для нет такого файла или каталога

Обновлено: 07.07.2024

Я пытаюсь создать свой собственный базовый образ busybox.

Я вижу, что изображение доступно с моей репликой докеров.

Но когда я пытаюсь выполнить docker run, я всегда получаю ошибку:

Я не могу понять, почему он дает эту ошибку? Я делаю что-то неправильно? Как еще я могу проверить, что я создаю правильное изображение, находящееся в рабочем состоянии?

ОТВЕТЫ

Ответ 1

После создания изображения проверьте его с помощью:

и проверьте, что у вас есть в опции CMD. Для занятой коробки это должно быть:

Возможно, вы перезаписываете опцию CMD в вашем. /mkimage.sh

Ответ 2

Я ударил эту ошибку ( "stat/bin/ bash: no такой файл или каталог" ) при запуске команды:

Решение заключалось в определении типа терминала (или оболочки), доступного в контейнере. Для этого я побежал:

В выводе этой команды я увидел:

Это говорит мне, что существует команда /bin/sh , и я смог установить соединение с:

Ответ 3

Докер: Ошибка ответа от демона: Ошибка создания среды выполнения OCI: container_linux.go: 348: запуск процесса контейнера вызвал "exec: \ "/bin/sh \": stat/bin/sh: нет такого файла или каталога ": неизвестно.

происходит при создании образа докера из базового образа, например. scratch . Это связано с тем, что полученное изображение не имеет оболочки для выполнения изображения. Если вы используете:

в вашем файле Docker Docker использует /bin/sh для анализа входной строки. и, следовательно, ошибка. Проверяя изображение, вы найдете:

Это означает, что аргументы ENTRYPOINT или CMD будут проанализированы с использованием /bin/sh -c. Решение, которое мне помогло, состоит в том, чтобы проанализировать команду как массив строк JSON, например.

и снова осматриваем изображение:

Это устраняет зависимость от /bin/sh, которую приложение docker теперь может выполнять двоичный файл. Пример:

Надеюсь, это поможет кому-то в будущем.

Ответ 4

Явно упоминаю версию ubuntu в файле докеров, который вы пытаетесь запустить,

Не используйте, например, FROM ubuntu:Latest . Это разрешило мое выше "Не удается запустить контейнер: стат /bin/sh: нет такого файла или каталога" проблема

Ответ 5

У вас нет оболочки в /bin/sh? Вы пробовали docker run -it pensu/busybox /usr/bin/sh ?

если в /p/a/t/h/ лежат только скрытые файлы и папки.

Нужно СОДЕРЖИМОЕ ОДНОГО КАТАЛОГА скопировать в другой.
В инете нашёл способ с добавлением точки.

Работает, но я его не понимаю. Он какой-то недокументированный. Ни в хелпе, ни в мане про это ничего не сказано.

Как это всё-таки правильно делать?

redix avatar

YuraRimskiy
Он какой-то недокументированный. Ни в хелпе, ни в мане про это ничего не сказано

red avatar

все файлы кроме скрытых копируются из каталога 1 в каталог 2

копируются только скрытые файлы из каталога 1 в каталог 2

копируются все файлы (скрытые и не скрытые)

YuraRimskiy
Он какой-то недокументированный. Ни в хелпе, ни в мане про это ничего не сказано.

там работает не документация а логика )

"." - также означает и текущий каталог (можно увидеть командой ls -la); к слову, родительский каталог обозначается двумя точками(..)

ваша команда
эквивалентна
то есть, вы копируете конкретный каталог - "1/." со всем его содержимым, которое "естественно" копируется в текущий(.) каталог 2

команды
и
эквивалентны (относительно результата) хотя и работают немного по разному
и раз они делают то что от них ожидается то и "правильными" будут они оба )

На самом деле, всё просто :)
1) вместо всех этих --recursive и т.д., используйте cp -a
2) чтобы шаблон * включал в себя "скрытые" файлы и каталоги, нужно просто переключить поведение шаблонов

Нет, . и .. под этот шаблон не попадут. Чтобы вернуть нормальное поведение в текущей сессии баша, опцию можно отключить той же командой с ключом -u
Подробнее об опциях шаблонов баша смотрите, например, тут.
Из других интересных возможностей – можно отключить чувствительность шаблонов к регистру: В этом примере будут выведены файлы, оканчивающиеся и на .jpg, и на .JPG

red avatar

Natrio
Под шаблон .* попадут, в том числе, . (текущий каталог) и .. (родительский каталог). Очень не советую так делать.

что попадает, а что не попадает под шаблон при копировании можно легко проверить, для этого и существует параметр --verbose
например:
скопируем содержимое каталога 1 в 2:
скорее всего в утилите cp уже заранее учтено то что копировать каталоги . и .. ненужно если это не указанно явно

во втором способе мы указали явно копировать каталог .
но так как каталог 2/. это тот же каталог 2 то и результат будет одинаков

cp –recursive –verbose 1/ 2

cp –recursive –verbose 1/. 2

эквивалентны (относительно результата) хотя и работают немного по разному
и раз они делают то что от них ожидается то и "правильными" будут они оба )

Ваша гипотеза об автоматическом "выкидывании" . и .. командой cp не оправдывается (тем более, что она получает от баша не шаблоны, а уже раскрытый список путей, явно содержащий все варианты раскрытия):
пример явно делает много лишнего.

Что касается второго, копирующего 1/. , он действительно работает, хотя и очень неочевидным способом, то есть в данном случае как раз имеет место "костыль" внутри команды cp: путь "каталог/." (формально эквивалентный "каталог" ) воспринимается как указание копировать содержимое вместо самого каталога, если каталог назначения существует (если не существует, всё работает так же, но уже вполне ожидаемо).

P.S.
Кроме того, костыль внутри cp никаки не поможет с другими командами, к примеру mv так уже не умеет:
Команда scp воспримет "путь/". как эквивалент "путь", и сработает почти как cp, с одним забавным отличием – прежнее содержимое каталога назначения будет уничтожено.

+ .
If epochs are used, the colon : is also allowed
The current value is: mykernel
Aborting.

Добавлено через 3 минуты
Попробовал такую команду fakeroot make-kpkg -j 5 --initrd --append-to-version=-custom kernel_image kernel_headers;
Ошибка уже другая:
make[1]: выход из каталога «/home/bogdann/Документы/temp/linux-4.14.8»
/usr/share/kernel-package/ruleset/minimal.mk:93: ошибка выполнения рецепта для цели «debian/stamp/conf/minimal_debian»
make: *** [debian/stamp/conf/minimal_debian] Ошибка 2
Failed to create a ./debian directory: at /usr/bin/make-kpkg line 970.

Добавлено через 32 минуты
Случайно не весь текст ошибки скопировал
make[2]: вход в каталог «/home/bogdann/Документы/temp/linux-4.14.8»
scripts/kconfig/conf --silentoldconfig Kconfig
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
In file included from <stdin>:1:0:
./scripts/gcc-plugins/gcc-common.h:5:22: fatal error: bversion.h: Нет такого файла или каталога
compilation terminated.
Cannot use CONFIG_GCC_PLUGINS: your gcc installation does not support plugins, perhaps the necessary headers are missing?
scripts/Makefile.gcc-plugins:69: ошибка выполнения рецепта для цели «gcc-plugins-check»
make[2]: *** [gcc-plugins-check] Ошибка 1
make[2]: выход из каталога «/home/bogdann/Документы/temp/linux-4.14.8»
debian/ruleset/targets/common.mk:194: ошибка выполнения рецепта для цели «debian/stamp/conf/kernel-conf»
make[1]: *** [debian/stamp/conf/kernel-conf] Ошибка 2
make[1]: выход из каталога «/home/bogdann/Документы/temp/linux-4.14.8»
/usr/share/kernel-package/ruleset/minimal.mk:93: ошибка выполнения рецепта для цели «debian/stamp/conf/minimal_debian»
make: *** [debian/stamp/conf/minimal_debian] Ошибка 2
Failed to create a ./debian directory: at /usr/bin/make-kpkg line 970.

Добавлено через 20 минут
Эту проблему решил, этой командой: sudo apt-get install gcc-5-plugin-dev.
Но опять же, вылезли новые ошибки
scripts/extract-cert.c:21:25: fatal error: openssl/bio.h: Нет такого файла или каталога
compilation terminated.
scripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: Нет такого файла или каталога
compilation terminated.
scripts/Makefile.host:102: ошибка выполнения рецепта для цели «scripts/extract-cert»
make[2]: *** [scripts/extract-cert] Ошибка 1
make[2]: *** Ожидание завершения заданий…
scripts/Makefile.host:102: ошибка выполнения рецепта для цели «scripts/sign-file»
make[2]: *** [scripts/sign-file] Ошибка 1
HOSTCC scripts/mod/file2alias.o
HOSTLD scripts/genksyms/genksyms
HOSTLD scripts/mod/modpost
Makefile:557: ошибка выполнения рецепта для цели «scripts»

Добавлено через 8 минут
Помогло sudo apt-get install libssl-dev.

Я пытался установить Pencil Project на Ubuntu-18.04 для разработки пользовательских интерфейсов раньше реализуя это. У меня возникла следующая проблема с установкой, и я не знаю, почему. После скачивания я только

/ Downloads $ sudo dpkg -i Pencil_3.1.0.ga_amd64.deb && sudo apt install -f (Чтение базы данных . В настоящее время установлено 257381 файл и каталог.) Подготовка к распаковке Pencil_3.1.0.ga_amd64.deb. .. Распаковка карандаша (3.1.0.ga) поверх (3.1.0.ga) . rm: невозможно удалить '/usr/share/applications/pencil.desktop': нет такого файла или каталога rm: невозможно удалить '/ usr / share / applications / Pencil.jpg ': нет такого файла или каталога. Настройка карандаша (3.1.0.ga) . mv: не удается stat' Pencil.desktop ': нет такого файла или каталога mv: не удается stat' карандаш .jpg ': нет такого файла или каталога chmod: нет доступа' /usr/share/applications/pencil.* ': нет такого файла или каталога Чтение списков пакетов . Готово Построение дерева зависимостей Чтение информации о состоянии . Готово 0 обновлено , 0 вновь установленных, 0 для удаления и 529 не обновленных.

И я не уверен, почему не устанавливается. Я проконсультировался с этим источником а также this, и оба источника сообщили, что в папке, указанной в предупреждении, отсутствует файл. . Кажется, отсутствует значок или .jpg . Но я загрузил .deb из официальной документации. и просто

2 ответа

Это здорово, позвольте мне рассказать вам, что я думаю, что происходит

Вы установили 3.1.0.ga и теперь переустанавливаете (переустановить пакеты должно быть нормально)

Он пытается удалить его самостоятельно с первой установки. (При первой установке эти файлы сюда не помещались, поэтому они не могут быть найдены при удалении)

Эти три строчки - корень вашей проблемы. Я загрузил пакет, и все файлы присутствуют, но я предполагаю, что это проблема пути.

Итак, давайте посмотрим на скрипт, который не может правильно перемещать файлы. Он называется postinst и представляет собой сценарий оболочки.

Два mv (перемещение файлов), которые не работают, и chmod (изменение разрешений) явно присутствуют.

Возможно (и я не знаю точно), но я думаю, что на этапе перед запуском этого скрипта файлы перемещаются в / opt / $ NAME- $ VERSION / (opt / Pencil / 3.1.0.ga /), а для Причины, по которым я не понимаю, что не происходит.

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

У меня была такая же проблема с той же версией. Когда я пытался установить с помощью:

Это вызвало у меня ту же ошибку, но я удалил ее раньше с параметром -f

Это то, что я сделал, и это сработало

PD: Я хотел бы указать, что, если после установки он не запускается, вы можете попробовать выполнить поиск с помощью gnome-system-monitor или htop все карандашные процессы и убить / завершить. То же самое случилось и со мной.

Эти ошибки происходят из-за того, что эти файлы принадлежат к специальной файловой системе procfs (установленной в /proc). Файловая система proc представляет информацию о процессах в иерархической файловой структуре, поэтому в тот момент, когда find пытается получить доступ к этим специальным файлам, они больше не присутствуют.

Чтобы игнорировать эти ошибки, добавьте -xdev для GNU find (или -x для BSD find), например

-xdev Не спускайте каталоги на другие файловые системы.

4 ответа

Ярлык:

В конце концов, если вы изменили права доступа к каталогу sudoers.d, запустите:

Введение

Я испортил файл /etc/sudoers, чтобы получите аналогичную ошибку, как и вы.

Моя учетная запись root была заблокирована, и она didn У меня есть пароль, поэтому мне было невозможно делать то, что я хотел сделать. однако если ваша учетная запись root активна и имеет пароль, переключитесь на пользователя root с помощью su - и пропустите эту часть. Если это не так, следуйте инструкциям.

Получение доступа root

Перезагрузка вашей системы Когда появляется grub, нажмите e, чтобы отредактировать его. В конце строки, которая начинается с linux, добавьте init=/bin/bash Нажмите CTRL + X

Теперь вы попадете в оболочку bash с корневым доступом. сначала перемонтируйте файловую систему с доступом для записи:

Затем откройте пользователя root и установите для него пароль:

Теперь, если ваш /etc/sudoers все еще существует /etc, переместите его в другое место:

Поскольку мы собираемся сообщить нашему менеджеру пакетов, что этот файл отсутствует, и он заменит его на правильную, поэтому он должен «Нет».

Мы почти закончили, перезагрузите вашу систему. войдите как обычный пользователь, откройте терминал, затем попробуйте su - переключиться на пользователя root. Я не смог этого сделать, поэтому я использовал CTRL + ALT + F1, чтобы войти в tty1, а затем я зарегистрировался как root с новым паролем, который мы только что установили.

Вернуть sudoers назад

Мы просто должны переустановить пакет sudo, однако переустановка не возвращает этот файл, мы должны сказать dpkg для исправления отсутствующих файлов конфигурации, например:

Помните, что он попросит вас установить файл /etc/sudoers, вставив y, скажите «да».

Если это не сработало для вас, выполните следующие действия как root:

[d40 ] Если все пойдет правильно, ваш файл sudoers вернется, и вы сможете использовать sudo, как раньше.

Я попытался вернуть школьников. Но я получаю странные ошибки с Javascript-common: Настройка javascript-common (11) . dpkg: пакет обработки ошибок javascript-common (--configure): подпроцесс установлен после установки сценарий возвращен статус выхода 1 Настройка up sudo (1.8.9p5-1ubuntu1.3) . При обработке были обнаружены ошибки: javascript-common E: Sub-process / usr / bin / dpkg возвратил код ошибки (1) – Cassie 17 April 2017 в 10:40 @Cassie Я добавил новую инструкцию, когда apt не работает . ;) – Ravexina 17 April 2017 в 10:52 Я попробовал, но мои судьи все еще не работают. Может быть, есть проблема с настройкой? Потому что, когда я набрал dpkg-reconfigure sudo, я не получил выход. – Cassie 17 April 2017 в 11:26 @ByteCommander У моей учетной записи root был пароль, и я этого не знал. поэтому я не смог использовать оболочку восстановления root, также у меня не было установленного pkexec. как я уже упоминал, этот раздел предназначен для тех случаев, когда ни одна из рекомендованных инструкций не работает. Я почищу инструкцию немного больше . любые предложения, чтобы сделать ответ более полезным, приветствуются :) спасибо. – Ravexina 17 April 2017 в 15:48

в dpkg-перенастроить: если только что-то не так с разрешения файл [F8] и с корневой доступ: dpkg-reconfigure sudo. что-то вроде pkexec dpkg-reconfigure sudo должно сделать работу.

в конце концов, если вы слишком изменилась sudoers.d директорию, запустите:

pkexec chmod 755 /etc/sudoers.d

pkexec chmod 755 /etc

Введение

я изменил мой файл [20 фунтов], чтобы получить подобную ошибку, как вы. Я получаю очень близко, так что я полностью удалить шахте, и это стало точно как у вас.

что я делал для устранения проблемы:

корень Мой аккаунт был заблокирован, и это не было пароля, так что это было невозможно для меня, чтобы делать то, что я хотел сделать. однако, если ваша корневая учетная запись активна и имеет пароль, переключитесь на пользователя root с [клавиши f21] и пропустить эту часть. если нет, следуйте инструкциям.

[dиода d17]получение root доступа[!dиода d17] перезагрузить систему, когда жратва появится нажмите e, чтобы отредактировать его в конце строки, которая начинается с Linux, добавить init=/bin/bash нажмите Ctrl+х

теперь вы попадете в оболочку bash с правами суперпользователя. первая файловая система монтирования с доступом на запись:

mount -o remount,rw /

после разблокировки root пользователя и установить пароль на него:

passwd -u root passwd root

теперь, если ваш [f25 привод датчика] существует /etc, переместите его в другое место:

mv /etc/sudoers /etc/sudoers.broken

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

мы почти закончили, перезагрузите систему. войти как обычный пользователь, откройте терминал, то попробуйте su -, чтобы переключиться на пользователя root. Я не был в состоянии сделать это, так что я сделал было с помощью Ctrl+АЛТ+Ф1, чтобы пойти в tty1, а затем я вошел в систему как пользователь root с новым паролем, мы установили.

принесет пользователям использовать sudo? обратно

apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall sudo

помните, что он просит Вас об установке файл /etc/sudoers, вставив [f32 из] сказать "да".

если это не работает для вас, выполните следующие действия как root:

mkdir /root/tmp cd /root/tmp apt-get download sudo dpkg-deb -x sudo*.deb . cp etc/sudoers /etc/sudoers cd /root rm -r tmp

[и D40]если все идет правильно, ваша файлами sudoers вернется и вы сможете использовать sudo, как вы были раньше.[!и D40]

Читайте также: