Недавно задался вопросом одного пользовательского пространства для 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