Como eu compartilho um diretório entre um contêiner LXC e o host?

9

Como posso compartilhar uma pasta entre o sistema host (ubuntu 14.04) e um contêiner lxc do ubuntu?

Eu tentei montar a pasta no host:

sudo mount --bind /media/data/share /media/data/container/name/rootfs/share

mas não consigo ver nenhum arquivo.

O mesmo vale para:

sudo ln -s /media/data/share /media/data/container/name/rootfs/share

Preciso alterar as permissões para a pasta compartilhada?

    
por Max 17.04.2015 / 17:12

4 respostas

10

Encontrei um artigo no wiki do openSUSE: link

Eu segui os passos e funciona agora.

Crie o diretório do host:

mkdir /media/data/share && chmod 7777 /media/data/share

Crie o diretório no contêiner lxc:

mkdir /share

Edite o arquivo de configuração lxc no host:

nano /var/lib/lxc/containername/config
lxc.mount.entry = /media/data/share share none ro,bind 0.0
    
por Max 18.04.2015 / 19:05
9

De acordo com a documentação do LXC você pode fazer isso por meio de um contêiner privilegiado:

lxc launch ubuntu priv -c security.privileged=true
lxc config device add priv homedir disk source=/home/$USER path=/home/ubuntu
    
por Jorge Castro 03.03.2016 / 20:41
3

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.

    
por BreakDS 30.11.2016 / 18:18
0

Você também pode fazer isso sem o LXD editando diretamente o arquivo de configuração do LXC:

# Container specific configuration
lxc.idmap = u 0 165536 1000
lxc.idmap = g 0 165536 1000
lxc.idmap = u 1000 1000 1
lxc.idmap = g 1000 1000 1
lxc.idmap = u 1001 166536 64535
lxc.idmap = g 1001 166536 64535

Você também precisa garantir que a conta do usuário do contêiner receba permissão para mapear para o uid / gid 1000 no host, editando / etc / subuid e / etc / subgid:

containeruser:165536:65536
containeruser:1000:1
    
por apokluda 21.03.2018 / 17:10