# How to Mount NFS Storage for Docker Containers

## Purpose

Mount a remote NFS share on a Linux server for use by **Docker containers**, ensuring stable operation, correct permissions, and automatic remounting.

---

## 1. Install NFS Client on the Server

```bash
sudo apt update
sudo apt install nfs-common -y

```

---

## 2. Create a Local Mount Directory

Create a local directory where the NFS share will be mounted:

```bash
sudo mkdir -p /srv/nfs-mount
sudo chown $(whoami):$(whoami) /srv/nfs-mount

```

*(You can replace `/srv/nfs-mount` with your preferred path.)*

---

## 3. Mount the NFS Share (Manual Test)

Example:

```bash
sudo mount -t nfs4 192.168.100.11:/mnt/hdd-storage/my-nfs-share /srv/nfs-mount

```

- `nfs4`: Use NFS version 4 for better performance and locking.
- `proto=tcp`: Reliable transport.
- `hard`: Wait for server recovery instead of failing immediately.
- `timeo=600`: Timeout setting for NFS.
- `retrans=2`: Retry failed operations twice.
- `sec=sys`: Default authentication security.
- `_netdev`: Only mount after network is ready.

---

## 4. Verify That the Mount Worked

```bash
mount | grep nfs

```

You should see:

```bash
192.168.100.11:/mnt/hdd-storage/my-nfs-share on /srv/nfs-mount type nfs4 (...)

```

---

## 5. Make the Mount Persistent (Auto-Mount on Boot)

Edit your `/etc/fstab` file:

```bash
sudo nano /etc/fstab

```

Add the following line:

```bash
192.168.100.11:/mnt/hdd-storage/my-nfs-share /srv/nfs-mount nfs4 rw,relatime,hard,proto=tcp,timeo=600,retrans=2,sec=sys,_netdev 0 0

```

Save and exit (`Ctrl+O`, `Enter`, `Ctrl+X`).

---

## 6. Test the fstab Entry Without Rebooting

```bash
sudo mount -a

```

No errors = success ✅

---

## 7. Using the NFS Mount with Docker

When running your containers, **bind-mount** your NFS storage into the container:

```bash
docker run -d \
  --name my-container \
  -v /srv/nfs-mount:/app/data \
  my-docker-image

```

This will allow your Docker containers to directly access the NFS storage.

---

## ✅ Summary

- **Use NFSv4** (`nfs4`) whenever possible.
- **Always** include `_netdev` in `/etc/fstab`.
- **Use `hard` mounts** to protect container file operations during NFS server issues.
- **Bind-mount** the NFS path inside containers carefully.
- **Avoid** using NFS for databases unless network latency is very low.

---

## 🛠️ Useful Commands

- Mount NFS manually: `sudo mount -t nfs4 server:/path /mountpoint`
- Check current NFS mounts: `mount | grep nfs`
- Reload fstab: `sudo mount -a`

---

## 🧠 Additional Notes

- If the NFS server reboots, containers may pause if heavily dependent on storage.
- When using Compose (`docker-compose.yml`), define volumes mapped to NFS mount points.
- For production, consider using **systemd mount units** for even better recovery handling.