adlogix / docker-machine-nfs

Activates NFS on docker-machine
MIT License
794 stars 104 forks source link

Add support for User-space NFS (UNFS3) #56

Closed erikwilson closed 7 years ago

erikwilson commented 8 years ago

Many thanks for creating docker-machine-nfs, it is a much better solution to buggy virtual machine shares or overly specialized solutions such as Dinghy.

However, NFS can become a pain point with the security and permission issues which often arise. User-space NFS seems to be the solution to many of these problems.

Please review the following fork for a functional implementation using UNFS3: https://github.com/erikwilson/docker-machine-unfs

Here are some advantages to using unfsd vs the system nfsd:

Disadvantages to switching to unfsd:

Other advantages to the unfs branch that can be backported:

I would submit the fork as a pull request but am hoping for some feedback first. I have experienced some issues with nfs where docker doesn't seem to perform virtual mappings correctly but reports 'Cannot link to a non running container' if there are any linked containers. The solution seems to be removing containers before starting (eg docker-compose rm), rather than killing them.

tonivdv commented 8 years ago

Interesting. Hope I'll find some time to check this.

erikwilson commented 8 years ago

Thanks, hope you have a chance to check it out! I did some cleanup of the unfs fork, it uses pure bash now, it may work in Linux distros if anyone has the time to test.

konobi commented 8 years ago

Nice work... I've been working on something similar.

It would be great to have the shared folder option to have the ability to take a mountpoint name inside the machine... ie: --shared-folder=/User/bob/project:/project.

konobi commented 8 years ago

The RancherOS folks have documentation of how to get NFS client mounts going in their documentation. That'd be another great addition.

tonivdv commented 8 years ago

Hey @erikwilson ,

I took some time to checkout UNFS3 and the changes you made in your fork. Several things pops to my mind:

That being said, I do think, if UNFS3 is actively used by many users that it has it's place. But how to support both system correctly?

It could be as a separate project, but I don't think this will benefit both projects as a lot of functionalities related to docker machine are the same ... Put everything in the same bash file or do it like they do it on the docker-machine project trying to work with "drivers". The idea would then to isolate every common functionalities and implement each specific functionalities in different files ...

These are just ideas so any feedback or other propositions are welcome.

Cheers

konobi commented 8 years ago

I forked and added the functionality I mentioned. It's a PR on your fork @erikwilson

erikwilson commented 8 years ago

Thanks @tonivdv, it does appear that unfs3 is not very well maintained, being on Sourceforge and all. There are a fair amount of daily downloads but the last update was from October of 2015. Looks like maybe a couple updates a year to the project. Was trying to find it on the latest release of Ubuntu, seems there is some issue where it hasn't made it into the Universe repository for 15-10. Hopefully it will continue to be well supported as a brew package.

If you are interested in supporting Unfs3 (or things like RancherOS) I would recommend trying to split the logic up into smaller parts. Unfortunately bash isn't the greatest for modular programming, but would still help to make the code more manageable.

tonivdv commented 8 years ago

Unfortunately bash isn't the greatest for modular programming, but would still help to make the code more manageable.

I couldn't agree more :) . At one time I was thinking of migrating that to golang (as most of docker stuff is done in that language) ... but currently I got a lot on my plate with our own internal project so not sure when that will see the day.

That being said, even with bash we could do very fancy stuff :)