#docker #alpine #sshfs
#docker #alpine #sshfs
Вопрос:
Я использую php:7.3.2-cli-alpine3.9
в качестве базового образа. Мне также нужно, чтобы SSHFS был установлен внутри контейнера, поскольку библиотека PHP, которую я использую, полагается на нее. Я знаю, что есть много ответов: «если вы устанавливаете SSHFS внутри контейнера, вы делаете это неправильно», но в моем случае мне нужно, чтобы это программное обеспечение было установлено внутри контейнера, а не на хосте.
В моем Dockerfile у меня есть
RUN apk update amp;amp; apk add sshfs;
Эта команда выполняется без ошибок:
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
v3.9.3-21-g265a28802e [http://dl-cdn.alpinelinux.org/alpine/v3.9/main]
v3.9.3-15-g583c0d55e9 [http://dl-cdn.alpinelinux.org/alpine/v3.9/community]
OK: 9764 distinct packages available
(1/12) Installing openssh-keygen (7.9_p1-r4)
(2/12) Installing openssh-client (7.9_p1-r4)
(3/12) Installing fuse-common (3.2.6-r1)
(4/12) Installing fuse3 (3.2.6-r1)
(5/12) Installing libffi (3.2.1-r6)
(6/12) Installing libintl (0.19.8.1-r4)
(7/12) Installing libuuid (2.33-r0)
(8/12) Installing libblkid (2.33-r0)
(9/12) Installing libmount (2.33-r0)
(10/12) Installing pcre (8.42-r1)
(11/12) Installing glib (2.58.1-r2)
(12/12) Installing sshfs (3.5.1-r0)
Executing busybox-1.29.3-r10.trigger
Executing glib-2.58.1-r2.trigger
OK: 25 MiB in 44 packages
Но когда я пытаюсь подключить удаленный хост
'/usr/bin/sshfs' -C -o reconnect -o 'Port=22' -o 'UserKnownHostsFile=/ssh/known_hosts' -o StrictHostKeyChecking=yes -o 'IdentityFile=/ssh/<FILE>' -o PasswordAuthentication=no '<USER>@<HOST>:/' '/fuse/'
Я получаю:
fuse: device not found, try 'modprobe fuse' first
Когда я запускаю его, я получаю:
modprobe: can't change directory to '/lib/modules': No such file or directory
Мне не хватает каких-либо пакетов? Что еще нужно установить?
Спасибо.
Комментарии:
1. Вы пытались создать этот каталог (в dockerfile) перед установкой пакета sshfs? Или даже создайте его после установки, просто чтобы посмотреть, работает ли он после этого.
2. Вы не можете загрузить модуль ядра из контейнера Docker. Возможно, вам удастся или не удастся загрузить соответствующий модуль за пределами Docker; или же выполнение рабочей нагрузки на виртуальной машине с ее собственным ядром (с известной версией), скорее всего, сработает.
3. @Scrambo Я действительно пытался, но это сработало не так, как я ожидал. Проблема не в отсутствии каталога, а в том, чего не хватает внутри.
4. @DavidMaze Спасибо, не могли бы вы рассказать немного подробнее? Меня интересует только SSHFS, работающий внутри контейнера. Он полагается на модуль ядра, но другое программное обеспечение также делает это, пока ядро хоста Docker «прокси». Это только проблема, связанная с Alpine, и изображение centos / ubuntu будет работать?
Ответ №1:
Для запуска SSHFS внутри контейнера требуются привилегированные разрешения.
Установите SSHFS, добавив эту строку в Dockerfile: RUN apk update amp;amp; apk add sshfs;
Запустить контейнер: docker run --privileged=true -it --rm --name alpine-app transfers-image