Isso acontece porque o volume está usando a propagação private
mount. Isso significa que, uma vez que a montagem acontece, quaisquer alterações que ocorram no lado da origem (por exemplo, o lado "host" no caso do Docker) não estarão visíveis sob o suporte.
Existem algumas maneiras de lidar com isso:
-
Execute a montagem do NFS primeiro e inicie o contêiner. A montagem será propagada para o contêiner, no entanto, como antes, quaisquer alterações na montagem não serão vistas pelo contêiner (incluindo desmontagens).
-
Use a propagação "escrava". Isso significa que, depois que a montagem for criada, qualquer alteração no lado da origem (host do Docker) poderá ser vista no destino (no contêiner). Se acontecer de você estar fazendo montagens aninhadas, você vai querer usar
rslave
(r
para recursivo).
Há também propagação "compartilhada". Este modo faria alterações no ponto de montagem de dentro do contêiner propagado para o host, bem como o contrário. Como o usuário não teria privilégios para fazer tais alterações (a menos que você adicione CAP_SYS_ADMIN), provavelmente não é isso que você deseja.
Você pode definir o modo de propagação ao criar a montagem assim:
$ docker run -v /foo:/bar:private
A outra alternativa seria usar um volume em vez de um host. Você pode fazer isso assim:
$ docker volume create \
--name mynfs \
--opt type=nfs \
--opt device=:<nfs export path> \
--opt o=addr=<nfs host> \
mynfs
$ docker run -it -v mynfs:/foo alpine sh
Isso sempre irá montar o contêiner sempre para você, não depende de ter a configuração do host de alguma maneira específica ou de lidar com a propagação de montagem.
note : o :
na frente do caminho do dispositivo é necessário, apenas algo estranho sobre o módulo do kernel nfs.
note : O Docker não resolve atualmente <nfs host>
de um nome DNS (ele irá em 1.13) então você precisará fornecer o endereço IP aqui.
Mais detalhes sobre montagens de "subárvores compartilhadas": link