Phase 1 implementation of user namespaces as a remapped container root#12648
Phase 1 implementation of user namespaces as a remapped container root#12648icecrime merged 6 commits intomoby:masterfrom
Conversation
|
@estesp Nice! :) |
|
Test fail. |
|
@cpuguy83 I know how to let people down right out of the gate! :) |
|
User namespace Patch TODOs:
|
builder/evaluator.go
Outdated
There was a problem hiding this comment.
I will add one, thanks!
|
This looks good, but I'm not familiar enough with the code to provide a deep review. What do you think about using a nobody uid (or similar) if someone provides --root with no arguments? |
|
@diogomonica thanks for the initial review! I believe I have answered all questions you posed; let me know if I generated any more questions with my answers :) |
|
I think the only one that remains unanswered is: should we support --root with no arguments? And if so, this flag probably should be renamed to root-remap |
|
@estesp ping! :) |
|
I don't think we can support with no args unless it is a bool flag, also better to be explicit, I think. |
|
@diogomonica this was discussed briefly on IRC and in the original "docs-only proposal" PR; @tiborvass had some thoughts there as well in case he wants to add them here. In general I don't mind if Docker daemon has some "auto-remap" default, but as @cpuguy83 said I'm not sure the flag parsing code has the capability to handle no-arg if it isn't boolean, so we had discussed a "special value" like "dockroot", and if you specify that, it will create that uid and group if necessary and then use it as the root remapped value. E.g. |
|
Actually, remapping by default to a random UID sounds better than explicitly having to set the --root. Are we doing first release support for --root, second release make it the default? |
|
@diogomonica I think we need broader design decision from @docker/maintainers on how this feature is exposed in 1.7 versus future releases. To me, if default == on: (a) requires we choose a special user/group as default root without user input, and (b) requires that we perform significant testing (prior to release) of "most popular" images from DockerHub with the kinds of images users will expect to "just work" out of the box. I was leaning towards |
Signed-off-by: Jessica Frazelle <acidburn@docker.com> Docker-DCO-1.1-Signed-off-by: Jessica Frazelle <acidburn@docker.com>
|
So it did pass just needs one more change I gave (sorry) and it won't fail on docker-py next time bc I've removed that then we are ready EDIT: you were faster than I could comment lol |
|
ITS ALL GREEN LGTM |
|
Never been quite as happy to see green in my life :) |
|
Such green 💚 📗 🍏! |
|
Thanks @estesp, amazing work! (And @jfrazelle for testing), "LGTM" for the docs (per #12648 (comment)) |
|
🎉 congrats @estesp !! |
|
congrats @estesp 🎉 |
|
Nice!
|
|
Awesome! |
|
Woaaaaa!!!!!!! |
|
Awesome! :) Sent from my iPhone
|
|
Awesome! congrats @estesp |
|
good |
|
I am going through the docs of usernamespaces in which it says that one of the restriction is A --readonly container filesystem (this is a Linux kernel restriction against remounting with modified flags of a currently mounted filesystem when inside a user namespace)
|
|
@thaJeztah Ping. Please let me know if you want me to elaborate anything. |
|
@innocentme1 if you could send me a quick email at estesp @ gmail.com (so I have your email address) I'll be happy to write up answers to your questions after my vacation. This closed PR is probably not the best place to document, and if it turns out we can document these restrictions better, we can create some new PRs to do so or add it to some other useful location. Thanks! |

This pull request is an initial implementation of user namespace support in the Docker daemon that we are labeling an initial "phase 1" milestone with limited scope/capability; which hopefully will be available for use in Docker 1.7.
The code is designed to support full uid and gid maps, but this implementation limits the scope of usage to a remap of just the root uid/gid to a non-privileged user on the host. This remapping is scoped at the Docker daemon level, so all containers running on a Docker daemon will have the same remapped uid/gid as root. See PR #11253 for an initial discussion on the design.
Discussion of future, possibly more complex, phases should be separate from specific design/code review of this "phase 1" implementation--see the above-mentioned PR for discussions on more advanced use cases such as mapping complete uid/gid ranges per tenant in a multi-tenant environment.