Bug 51787 - Ошибка при выполнении docker run с опцией --init
Summary: Ошибка при выполнении docker run с опцией --init
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: docker-engine (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: cow@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-10-22 08:53 MSK by Alexey
Modified: 2024-10-22 13:39 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Alexey 2024-10-22 08:53:59 MSK
Добрый день.

Используем ALT Starterkit 10. При запуске контейнеров docker с опцией --init (https://docs.docker.com/reference/cli/docker/container/run/#init) получаем ошибку: 

docker: Error response from daemon: exec: "docker-init": executable file not found in $PATH.

Ошибка связана с тем, что при использовании опции --init важно наличие бинаря docker-init, в случае с ALT Linux в пути /usr/lib/docker (по этому же пути складываются cli-плагины типа buildx и compose). 

В качестве дефолтного гипервизора процессов в docker используется tini, который устанавливается, судя по всему, вместе с пакетом docker-engine. В случае с другими дистрибутивами (проверил на CentOS/Fedora) tini просто приносится вместе с пакетом docker-ce под именем docker-init прямиком в нужную директорию (в случае с CentOS/Fedora это /usr/libexec/docker).

Пробовал воспользоваться apt-cache search docker-init, что привело меня к пакету tini, однако после его установки не нашел в файловой системе файла docker-init. Вот что говорит apt-cache showpkg tini:

Package: tini
Versions: 
<REDACTED>

Reverse Depends: 
Dependencies: 
0.19.0-alt1:sisyphus+278957.100.1.1@1626303581 - docker-init (1 0.13.0) 
Provides: 
0.19.0-alt1:sisyphus+278957.100.1.1@1626303581 - tini docker-init 
Reverse Provides: 
tini 0.19.0-alt1:sisyphus+278957.100.1.1@1626303581

Для нас я данную ситуацию смогу полечить, слинкую /bin/tini на /usr/lib/docker/docker-init, но выглядит так, будто docker-init должен появляться в нужном пути после установки docker-engine.
Comment 1 Владимир Диденко 2024-10-22 10:13:35 MSK
У нас путь к init прописан в /etc/docker/daemon.json. Проверьте содержимое этого файла - по умолчанию там должно быть вот так

{
	"init-path": "/usr/bin/tini",
	"userland-proxy-path": "/usr/bin/docker-proxy",
	"default-runtime": "docker-runc",
	"live-restore": true,
	"log-driver": "journald",
	"runtimes": {
		"docker-runc": {
			"path": "/usr/bin/runc"
		}
	},
	"default-ulimits": {
		"nofile": {
		"Name": "nofile",
		"Hard": 64000,
		"Soft": 64000
		}
	},
	"storage-driver": "overlay2"
}
Comment 2 Alexey 2024-10-22 13:39:50 MSK
Да, действительно, у нас этот параметр отсутствует, поскольку мы конфигурируем сервера при помощи ansible и формируем daemon.json заново (переносили роль с другого дистрибутива, где daemon.json при установке пакета docker не создается). 

После внесения параметра все работает и без линков.

Спасибо.