Сбой доступа к последовательному порту, когда приложение Java Dockerized - PullRequest
1 голос
/ 23 февраля 2020

Приложение My Spring Boot использует библиотеку jSerialComm (v2.6.0) для последовательной передачи данных через порт USB. В документации jSerialComm отмечается важность добавления пользователя в число групп:

Примечание для Linux пользователей: доступ к последовательному порту ограничен определенными пользователями и группами в Linux. Чтобы разрешить доступ пользователей, вы должны открыть терминал и ввести следующие команды, прежде чем jSerialComm сможет получить доступ к портам вашей системы. Не беспокойтесь, если некоторые команды не будут выполнены. Все эти группы могут существовать не в каждом Linux дистрибутиве. (Обратите внимание, что этот процесс должен выполняться только один раз для каждого пользователя):

sudo usermod -a -G uucp username

sudo usermod -a -G dialout username

sudo usermod -a -G lock username

sudo usermod -a -G tty username

Итак, я написал файл Docker следующим образом:

FROM adoptopenjdk:11-jre-hotspot

# Run application as non-root user to help to mitigate some risks
RUN groupadd -r spring && useradd -r spring -g spring && \
 usermod -a -G uucp spring && \
 usermod -a -G dialout spring && \
 usermod -a -G tty spring
# `lock` group doesn't seem to exist, hence commented-out:
# usermod -a -G lock spring
USER spring:spring

COPY /Java/tempctrl/build/libs/*.jar app.jar

EXPOSE 80

ENTRYPOINT ["java", "-jar", "/app.jar"]

... и я включаю --device=/dev/ttyACM0:/dev/ttyACM0 (и, временно сжимая в str aws, --privileged) в команду docker run.

Когда приложение запускается, регистрация подтверждает, что /dev/ttyACM0 найдено в порядке. Но когда приложение пытается прочитать данные с последовательного порта, оно получает непрерывные нули. (Примечание: видел это несколько раз, прежде чем переместить приложение на Docker, и это было симптомом c USB-порта, который уже используется.)

Если я закомментирую USER spring:spring (то есть разрешить приложение, которое запускается как root), все в порядке.

Как я могу заставить эту работу работать без root привилегий?

1 Ответ

0 голосов
/ 23 февраля 2020

Согласно Docker документам , устройства, к которым предоставлен доступ --device, похоже, root владеют (см. Изображение в ссылке).

Возможно, вы можете попробовать chown ing it ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...