Abaixo está o que eu fiz para montar um dos meus diretórios do host no container. Isso é mais complicado do que parece porque gostaríamos de alcançar
- Dentro do contêiner, poderemos gravar 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 online (o mais útil é esta questão do github ), aqui está como eu resolvo esta. O truque é mapear o uid e o gid do usuário do host para o uid e gid do usuário dentro do contêiner.
Suponha que eu monte /home/breakds/projects
na mesma localização exata no contêiner. O diretório externo é de propriedade do usuário breakds
, cujo uid e gid são 1000
.
Eu, então, criei um usuário no container chamado debian
, cujo uid e gid também eram 1000
(porque é o primeiro usuário não raiz). Vou então criar uma proficiência (lxc) no host por
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 a esse contêiner permanentemente:
$ lxc profile apply <my container> breakds
Isso deve funcionar.
OBSERVAÇÃO : Por favor note que antes de mudar para este perfil, certifique-se de que todos os diretórios ou arquivos cujo dono / grupo seja debian devem ser deletados (e provavelmente recriados após o switch). Isso ocorre porque, após o mapeamento uid e gid, sua propriedade se tornará inválida. Eu pensava que desde que eu estou apenas mapeando 1000-1000 tudo deve estar bem, mas eu acho que eu perdi alguma coisa aqui e seria ótimo se alguém pode aconselhá-lo sobre como resolver isso sem o hack.