Eu tenho experimentado o LXC / LXD no Ubuntu 14.04 e está tudo funcionando muito bem. Eu só preciso descobrir como fazer com que os diretórios compartilhados funcionem entre minha máquina host e um contêiner para que eu possa abandonar o Virtualbox de uma vez por todas.
Eu já vi esta página: https://wiki.gentoo.org/wiki/LXD
Que fornece instruções, mas continuo recebendo erros.
Alguém sabe de alguma instrução simples e clara para fazer isso funcionar? Qualquer ajuda muito apreciada.
lxc config device add confexample sharedtmp disk path=/tmp source=/tmp/shared
. Mas, olhando para o diretório no contêiner, o proprietário e o grupo dos arquivos estão configurados para 'ninguém' e 'nogroup' e a montagem é somente leitura.lxc file
para transferir arquivos entre host e contêiner, usandopush
epull
.Respostas:
As instruções em https://wiki.gentoo.org/wiki/LXD mencionadas 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 contêiner estão armazenados. Corre
e verifique o proprietário do contêiner com o qual você deseja compartilhar o diretório. No meu caso, o
uid
egid
ambos eram 100000.Em seguida, use-os para alterar a propriedade do diretório que você deseja compartilhar:
Compartilhe o diretório com o contêiner da maneira que você indicou em seu comentário:
Agora, no contêiner, você verá que o diretório
/tmp/share_on_guest
(eu não aconselho a montar seu diretório/tmp
porque é usado pelo sistema para outras coisas e tem permissões especiais) pertence ao root. A partir daqui, você pode usarchown
no contêiner para alterar a propriedade para o apropriadouid
egid
para o usuário no contêiner.Como observação lateral, depois de alterar a propriedade do contêiner para, por exemplo, um usuário com
uid
33 anos, você verá no host queuid
agora existe 100033, o que faz total sentido.fonte
/var/lib/lxd/containers
quais foi apontado/var/lib/lxd/storage-pools/lxd/containers
(neste caso, o últimolxd
bit é o nome do meu pool de armazenamento ZFS). Todos os contêineres pareciam ter o mesmo 165536 uid / gid durante a execução e pertencentes aroot:root
quando desligados.lxc config
e ela funcionou como um encanto!Aqui está uma resposta atualizada para esta pergunta.
Monte a pasta host
/var/www
como/var/test
no contêiner.fonte
Você pode atribuir dispositivos adicionais ao contêiner e podem ser pastas acessíveis pelo host.
Observe que
<device>
é apenas um nome arbitrário que você atribui, que será usado como um ID para o gerenciamento subsequente do dispositivo.Por exemplo, para montar a pasta do host "./host" como "/ mnt / host" no contêiner ...
Ainda existe um problema : se você deseja 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 valores de usuário e grupo
id
. Porém, existe uma solução fácil : ignore essa virtualização configurando o contêiner para executar com privilégios equivalentes a host ...As implicações completas de segurança de host dessa abordagem não estão claras para mim no momento, mas parecem estar um pouco "contidas" pela virtualização. O risco prático depende de como e por que você usará o contêiner. Veja as notas técnicas em https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containers
Observe também que essa abordagem provavelmente funcionará melhor se você normalmente operar no contêiner como um usuário não raiz, como se você se conectar com ...
fonte
env
é diferente, em particularhttp_proxy
. Um exemplo solução alternativa:sudo http_proxy=http://[fe80::1%eth0]:13128 apt-get update
.http_proxy
, acho que a solução mais fácil é provavelmente ativar o IPV4, conforme discutido aqui .sudo dhclient
no contêiner - ou mudemanual
paradhcp
in50-cloud-init.cfg
. DicasCom base na excelente resposta de ph0t0nix , proponho a seguinte abordagem passo a passo para o meu servidor Ubuntu 18.04:
No host, determine o UID do proprietário do rootfs:
No contêiner, determine o UID do ubuntu (ou seja, usuário no contêiner):
Crie uma pasta compartilhada no host e adicione-a ao contêiner:
Ajuste no UID do host da pasta compartilhada (UID = host UID + convidado UID):
Convidado (usuário ubuntu) agora tem acesso à pasta compartilhada e pode ajustar dentro do contêiner o acesso à pasta compartilhada usando
chmod
.fonte
Agora tenho uma solução segura e funcional para esse problema, usando perfis LXD para lidar com o mapeamento entre UID e GID no contêiner e no host.
Uma essência muito útil pode ser encontrada aqui:
https://gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8
fonte
0777
permissões aka "por favor, hackear meu sistema e destruir meus dados" sem motivo aparente! Quase nunca há uma razão para isso, porque isso pode ser evitado com modificações mais sensatas, como alterar a propriedade (do grupo). -1