Задать вопрос
Mikname
@Mikname

Как пробросить Rutoken в Docker контейнер?

Всем привет,
В компании скопилось большое количество токенов для системы ЕГАИС, размещать на отдельных компьютерах уже неудобно как и постоянно переключаться. Решил попробовать изолировать с помощью Docker этот сервис.

Второй день пытаюсь пробросить rutoken в Docker контейнер чтобы поднять UTM для ЕГАИС.
Как usb устройство вижу как rutoken нет, ставил библиотеки и драйвера использовал и контейнер для eToken, пытался пробросить и в -priveleged и device. бесполезно слот пустой.
Кто нибудь такое делал?
  • Вопрос задан
  • 2660 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
Mikname
@Mikname Автор вопроса
Под Centos не пробросился под 18 убунтой всё заработало.
Спасибо за внимание!

docker run -it -p 8080:8080 -d --rm --privileged -v /dev/bus/usb:/dev/bus/usb ubuntu
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
deepblack
@deepblack
Как насчет гипервизора ESXi?
Там правда свои нюансы есть.

https://dev.rutoken.ru/display/KB/RU1033
Ответ написан
@Angryadmin
Итак, если кому пригодится - выкладываю рабочий способ запустить актуальную на текущий момент (11.02.25) версию УТМ в Докере

Dockerfile
# Базовый образ с поддержкой systemd
FROM ubuntu:20.04

# Установка часового пояса
RUN ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime && \
    echo "Europe/Moscow" > /etc/timezone

# Обновление системы и установка необходимых пакетов
RUN dpkg --add-architecture i386 \
    && apt-get update && apt-get install -y \
    libc6:i386 \
    libncurses5:i386 \
    libstdc++6:i386 \
    libpcsclite1:i386 \
    curl \
    pcsc-tools \
    usbutils \
    supervisor \
    acl \
    wget \
    unzip \
    libusb-1.0-0 \
    libpcsclite1 \
    pcscd \
    opensc \
    python3 \
    python3-pip \
    software-properties-common \
    && apt-get clean

# Установка переменных окружения (исправленный формат)
ENV INIT_SYSTEMD=yes
ENV DEBUG=true

RUN mkdir -p /var/log/supervisor /var/run/supervisor

# Копирование DEB-пакета в контейнер
COPY /Docker/UTM/dist/u-trans-4.2.0-2632-i386.deb /tmp/u-trans.deb

# Установка DEB-пакета
RUN dpkg -i /tmp/u-trans.deb || (apt-get install -f -y && dpkg -i /tmp/u-trans.deb) \
    && rm /tmp/u-trans.deb \
    || true

# Копирование конфигурации supervisor
COPY supervisord.conf /etc/supervisor/supervisord.conf

# Копирование конфигурации программы UTM
COPY transport.conf /etc/supervisor/conf.d/transport.conf

# Копирование конфигурации pcscd
COPY pcscd.conf /etc/supervisor/conf.d/pcscd.conf

# Настройка автозапуска служб
RUN systemctl enable pcscd

# Экспорт порта 8080 для веб-интерфейса
EXPOSE 8080

# Запуск Supervisorctl при старте контейнера
CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"]

Файлы
supervisord.conf
; supervisor config file

[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)
chmod=0700                       ; sockef file mode (default 0700)

[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket

; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.

[include]
files = /etc/supervisor/conf.d/*.conf


transport.conf
[program:utm]
command=/opt/utm/transport/bin/transport.sh
#process_name=%(process_num)s
autostart=true
autorestart=true
stderr_logfile=/var/log/utm-trans.err.log
stdout_logfile=/var/log/utm-trans.out.log
redirect_stderr=true
numprocs=1


pcscd.conf
[program:pcscd]
command=/usr/sbin/pcscd --foreground --auto-exit
autostart=true
autorestart=true
stderr_logfile=/var/log/pcscd.err.log
stdout_logfile=/var/log/pcscd.out.log


Собираем образ командой
docker build --no-cache -t utm .

Запускаем контейнер командой
docker run -d   --name utm-container   -p 8080:8080   --device=/dev/bus/usb/003/003   utm

где - /dev/bus/usb/003/003 необходимо поменять на свои значения посмотрев их при помощи lsusb
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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