Abaixo está o que eu fiz para montar um diretório do meu host no contêiner. Isso é mais complicado do que parece, porque gostaríamos de alcançar
- Dentro do contêiner, devemos poder escrever no diretório
- Fora do contêiner, poderemos gravar nos arquivos e diretórios criados dentro do contêiner.
Depois de ler vários artigos on-line (o mais útil é esse problema do github ), aqui está como eu resolvo isso. O truque é mapear o uid e o gid do usuário host para o uid e o gid do usuário dentro do contêiner.
Suponha que eu seja montado /home/breakds/projects
exatamente no mesmo local no contêiner. O diretório externo é de propriedade do usuário breakds
, cujos uid e gid são 1000
.
Criei um usuário no contêiner chamado debian
, cujo uid e gid também eram 1000
(porque é o primeiro usuário não root). Depois, criarei uma profie (lxc) no host
lxc profile edit breakds
E abaixo está o conteúdo do perfil (acredito que esteja no formato yaml):
name: breakds
config:
raw.lxc: |
lxc.id_map =
lxc.id_map = u 0 165536 999
lxc.id_map = g 0 165536 999
lxc.id_map = u 1000 1000 1
lxc.id_map = g 1000 1000 1
lxc.id_map = u 1001 166537 64535
lxc.id_map = g 1001 166537 64535
user.vendor-data: |
packages:
- bash
description: allow home dir mounting for breakds
devices:
eth0:
name: eth0
nictype: bridged
parent: lxdbr0
type: nic
projects:
path: /home/breakds/projects
source: /home/debian/projects
type: disk
Em seguida, aplique esse perfil permanentemente ao contêiner:
$ lxc profile apply <my container> breakds
Isso deve fazer o truque.
NOTA : Observe que, antes de mudar para este perfil, verifique se todos os diretórios ou arquivos cujo proprietário / grupo é debian devem ser excluídos (e provavelmente recriados após a troca). Isso ocorre porque após o mapeamento uid e gid, sua propriedade se tornará inválida. Inicialmente, pensei que, como estou apenas mapeando de 1000 a 1000, tudo deveria ficar bem, mas acho que perdi alguma coisa aqui e seria ótimo se alguém pudesse aconselhar sobre como resolver isso sem o hack.