Mount propagation allows for sharing volumes mounted by a container to other containers in the same pod, or even to other pods on the same node.
Mount propagation of a volume is controlled by the
mountPropagation field in
Container.volumeMounts. Its values are:
none - This volume mount does not receive any subsequent mounts that are mounted to this volume or any of its subdirectories by the host. In similar fashion, no mounts created by the container are visible on the host. This is the default mode, and is equal to
private mount propagation in Linux kernels.
HostToContainer - This volume mount receives all subsequent mounts that are mounted to this volume or any of its subdirectories. In other words, if the host mounts anything inside the volume mount, the container acknowledges it mounted there. This mode is equal to
rslave mount propagation in Linux kernels.
Bidirectional - This volume mount behaves the same as the
HostToContainer mount. In addition, all volume mounts created by the container are propagated back to the host and to all containers of all pods that use the same volume. A typical use case for this mode is a Pod with a FlexVolume or CSI driver or a Pod that needs to mount something on the host using a
hostPath volume. This mode is equal to
rshared mount propagation in Linux kernels.
Before mount propagation can work properly on some deployments, such as CoreOS, Red Hat Enterprise Linux/Centos, or Ubuntu, the mount share must be configured correctly in Docker.
Edit your Docker’s systemd service file. Set
MountFlags as follows:
MountFlags=slave, if present.
Restart the Docker daemon:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker