Docker User-map запускаем docker от локального пользователя

Недавно задался вопросом одного пользовательского пространства для Docker, можно конечно использовать проброс папок (/etc/passwd, /etc/shadow, /etc/groups) и т.д., но мне этот метод показался не очень удобным, по этому я обратился к документации: https://docs.docker.com/engine/security/userns-remap/ последовав документации внес изменения в демон docker-а:

# cat /etc/docker/daemon.json

{
    "userns-remap": "yakunin"
}

Но к сожалению при запуске понял что минимальный uid должен начинаться с 100000. А мой пользователь имел uid 1000, ну что ж, не беда, немного повозившись с groups и passwd, перегружаемся и вуаля, пользователь root внутри контейнера имеет тот же uid что и локальный.

# id -u
100000

# ls -la data 
total 16
drwxr-xr-x 4 yakunin yakunin 4096 Jun 27 18:43 .
drwxrwxr-x 3 yakunin yakunin 4096 Jun 27 18:43 ..
drwxr-xr-x 2 yakunin yakunin 4096 Jun 27 18:45 conf.d
drwxr-xr-x 2 yakunin yakunin 4096 Jun 27 18:47 www

Это полезно когда мы используем не классические volumes, а именно мы указываем проброс папок в локальную папку откуда идет исполнение. Проблема в том, что изначально docker работает от пользователя root. По этому все создаваемые docker или docker compose папки будут с владельцем root, что не очень удобно, особенно если вам надо редактировать эти файлы часто. Например мой кусок docker-compose.yaml

nginx:
    image: nginx:latest
    container_name: nginx
    hostname: nginx
    build: .
    restart: always
    volumes:
      - ./data/www:/var/www
      - ./data/conf.d:/etc/nginx/conf.d
    tty: true
    ports:
      - 80:80
    cap_drop:
      - NET_ADMIN
      - SYS_ADMIN
    ulimits:
      memlock:
        soft: -1
        hard: -1
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s
      resources:
        limits:
          memory: 50M
    logging:
      driver: "json-file"
      options:
        max-size: "50m"
        max-file: 2

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *