Agora tenho uma solução segura e funcional para esse problema, usando perfis LXD para lidar com o mapeamento entre o UID e o GID no contêiner e no host.
Uma essência muito útil pode ser encontrada aqui:
Eu tenho experimentado com o LXC / LXD no Ubuntu 14.04 e está tudo funcionando muito bem. Eu só preciso descobrir como obter diretórios compartilhados trabalhando entre minha máquina host e um contêiner para que eu possa abandonar o Virtualbox de uma vez por todas.
Eu vi esta página: link
O que fornece instruções, mas continuo recebendo erros.
Alguém sabe de alguma instrução simples e clara para que isso funcione? Qualquer ajuda muito apreciada.
As instruções no link que você mencionou estão corretas, mas podem precisar de mais explicações.
No host, você primeiro verifica a propriedade do diretório em que os dados do container estão armazenados. Executar
sudo ls -l /var/lib/lxd/containers
e verifique o proprietário do contêiner com o qual você gostaria de compartilhar o diretório. No meu caso, os uid
e gid
foram 100000.
Em seguida, use-os para alterar a propriedade do diretório que você deseja compartilhar:
sudo chown 100000:100000 /tmp/share_on_host
Compartilhe o diretório com o contêiner da maneira indicada em seu comentário:
lxc config device add mycontainer sharedtmp disk \
path=/tmp/share_on_guest source=/tmp/share_on_host
Agora, no container, você verá que o diretório /tmp/share_on_guest
(eu não aconselharia montar seu diretório como /tmp
, porque isso é usado pelo sistema para outras coisas e tem permissões especiais) é de propriedade de raiz. A partir daqui, você pode usar chown
no contêiner para alterar a propriedade para os uid
e gid
apropriados para seu usuário no contêiner.
Como nota secundária, depois de alterar a propriedade no contêiner para, por exemplo, um usuário com uid
33 você verá no host que o uid
agora é de 100033, o que faz sentido.
Você pode atribuir dispositivos adicionais ao contêiner, e estes podem ser pastas acessíveis pelo host.
$ lxc config ## display help
...
lxc config device add [<remote>:]<container> <device> <type> [key=value...]
Add a device to a container.
...
Observe que <device>
é apenas um nome arbitrário atribuído, que será usado como um ID para o gerenciamento de dispositivos subsequente.
Por exemplo, para montar a pasta do host "./host" como "/ mnt / host" no container ...
lxc config device add mycontainer vartest disk source=$(pwd)/host path=/mnt/host
Permanece um problema - se você quiser que essa pasta seja gravável pelo host e pelo contêiner, a propriedade e as permissões precisam ser configuradas de acordo. Isso é complicado pelo modo padrão do LXD, que virtualiza os intervalos numéricos para os valores de usuário e grupo id
. Existe uma solução fácil, no entanto : ignorar essa virtualização configurando o contêiner para ser executado com privilégios equivalentes ao host ...
lxc config set <container> security.privileged true
As implicações completas de segurança do host dessa abordagem não estão claras para mim neste momento, mas parecem estar um pouco "contidas" pela virtualização. O risco prático depende de como e porque você estará usando o contêiner. Veja notas técnicas em link
Além disso, observe que esta abordagem provavelmente funciona melhor se você normalmente opera no container como um usuário não-root, tal como se você conectasse com ...
lxc exec zesty -- su --login ubuntu
Aqui está uma resposta atualizada para esta pergunta.
Monte a pasta do host "/ var / www" como "/ var / test" no contêiner.
lxc config device adicionar mycontainer vartest disk source = / var / www caminho = / var / test