6.0 KiB
aliases | description | keywords | menu | title | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
OSXFS |
|
|
File system sharing |
File system sharing (osxfs)
osxfs
is a new shared file system solution, exclusive to Docker for
Mac. osxfs
provides a close-to-native
user experience for bind mounting OS X file system trees into Docker
containers. To this end, osxfs
features a number of unique
capabilities as well as differences from a classical Linux file system.
- Case sensitivity
- Access control
- Namespaces
- Ownership
- File system events
- Mounts
- Symlinks
- File types
- Extended attributes
- Technology
Case sensitivity
With Docker for Mac, file systems are shared from OS X into containers in the same way as they operate in OS X. As a result, if a file system on OS X is case-insensitive that behavior is shared by any bind mount from OS X into a container. The default OS X file system is HFS+ and, during installation, it is installed as case-insensitive by default. To get case-sensitive behavior from your bind mounts, you must either create and format a ramdisk or external volume as HFS+ with case-sensitivity or reformat your OS root partition with HFS+ with case-sensitivity. We do not recommend reformatting your root partition as some Mac software dubiously relies on case-insensitivity to function.
Access control
osxfs
, and therefore Docker, can access only those file system
resources that the Docker for Mac user has access to. osxfs
does
not run as root
. If the OS X user is an administrator, osxfs
inherits
those administrator privileges. We are still evaluating which privileges
to drop in the file system process to balance security and
ease-of-use. osxfs
performs no additional permissions checks and
enforces no extra access control on accesses made through it. All
processes in containers can access the same objects in the same way as
the Docker user who started the containers.
Namespaces
Much of the OS X file system that is accessible to the user is also
available to containers using the -v
bind mount syntax. By default,
you can share files in /Users
, /Volumes
, /private
, and /tmp
directly. To add or remove directory trees that are exported to Docker,
use the File sharing tab in Docker preferences -> Preferences -> File
sharing. (See Preferences.) All other paths
used in
-v
bind mounts are sourced from the Moby Linux VM running the
Docker containers, so arguments such as -v /var/run/docker.sock:/var/run/docker.sock
should work as expected. If
an OS X path is not shared and does not exist in th VM, an attempt to
bind mount it will fail rather than create it in the VM. Paths that
already exist in the VM and contain files are reserved by Docker and
cannot be exported from OS X.
Ownership
Initially, any containerized process that requests ownership metadata of
an object is told that its uid
and gid
own the object. When any
containerized process changes the ownership of a shared file system
object, e.g. with chown
, the new ownership information is persisted in
the com.docker.owner
extended attribute of the object. Subsequent
requests for ownership metadata will return the previously set
values. Ownership-based permissions are only enforced at the OS X file
system level with all accessing processes behaving as the user running
Docker. If the user does not have permission to read extended attributes
on an object, e.g. when that object's permissions are 0000
, ownership
will be reported as the accessing process until the extended attribute
is again readable.
File system events
Most inotify
events are supported in bind mounts, and likely dnotify
and fanotify
(though they have not been tested) are also supported.
This means that file system events from OS X are sent into containers
and trigger any listening processes there.
The following are supported file system events:
- Creation
- Modification
- Attribute changes
- Deletion
- Directory changes
The following are partially supported file system events:
- Move events trigger
IN_DELETE
on the source of the rename andIN_MODIFY
on the destination of the rename
The following are unsupported file system events:
- Open
- Access
- Close events
- Unmount events (see Mounts)
Some events may be delivered multiple times. Events are not delivered for bind mounts from symlinks (notably /tmp
will not deliver inotify events but
/private/tmp
will). These limitations do not apply to events between
containers, only to those events originating in OS X.
Mounts
The OS X mount structure is not visible in the shared volume, but volume contents are visible. Volume contents appear in the same file system as the rest of the shared file system. Mounting/unmounting OS X volumes that are also bind mounted into containers may result in unexpected behavior in those containers. Unmount events are not supported. Mount export support is planned but is still under development.
Symlinks
Symlinks are shared unmodified. This may cause issues when symlinks contain paths that rely on the default case-insensitivity of the default OS X file system, HFS+.
File types
Symlinks, hardlinks, socket files, named pipes, regular files, and directories are supported. Socket files and named pipes only transmit between containers and between OS X processes -- no transmission across the hypervisor is supported, yet. Character and block device files are not supported.
Extended attributes
Extended attributes are not yet supported.
Technology
osxfs
does not use OSXFUSE. osxfs
does not run under, inside, or
between OS X userspace processes and the OS X kernel.