Как в Docker запустить процессы из под текущего пользователя?

Здравствуйте, используя Docker столкнулся с проблемой:
Указанные в docker-compose volues имеют владельца и группу root, вот пример docker-compose.yml
service:
  image: java/service
  build:
      context: .
      dockerfile: .docker/java.Dockerfile
      args:
        - UID
        - GID
    command: "java -jar file-service/file-service-rest/target/file-service.jar"
    restart: always
    user: "${UID}:${GID}"
    ports:
      - 4592:4592
    volumes:
      - ./:/usr/src/app
      - ./file-service/file-service-rest/target/classes/image:/usr/src/app/image
    environment:
      JAVA_OPTS: -Dspring.config.location=file-service/settings.properties
    healthcheck:
      test: curl -f http://localhost:4592/check


java.Dockerfile выглядит следующим образом:
FROM openjdk:17

ARG UID=1000
ARG GID=1000

ENV UID=${UID}
ENV GID=${GID}

RUN groupadd --gid $GID node \
  && useradd --uid $UID --gid node --shell /bin/bash --create-home node

USER node

WORKDIR /usr/src/app
  
ENTRYPOINT ["java"]


.env файл:
UID=1001
GID=1001


После выполнения команды docker-composer up -d --build создается директория image с правами root
  • Вопрос задан
  • 206 просмотров
Решения вопроса 1
в демо проекте пришлось явно задать агрумeнты в docker-compose.yml:

version: "3.7"

services:
  app:
    image: sample-java17-app
    user: "${UID:-1000}:${GID:-1000}"
    command: "java -jar /app/target/demo-2.7.5.jar"
    volumes:
      - .:/app
    ports:
      - "8585:8080"
    environment:
      UID: ${UID:-1000}
      GID: ${GID:-1000}


замените 1000 на то что дает $(id -u) $(id -g) в вашей машине

эта же тема обсуждается например

https://blog.giovannidemizio.eu/2021/05/24/how-to-...
https://nickjanetakis.com/blog/running-docker-cont...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы