# OpenIPC Wiki
[Table of Content](../README.md)

Running a TFTP server in Docker
-------------------------------

The easiest way to run a TFTP server is to do that inside a containerized
environment. It does not matter if you run Linux, Windows, or Mac, just perform
these steps:

### Install Docker Composer
Follow the [Docker installation instructions][1].

### Create Docker image files
Create a file named `Dockerfile` with the following content:
```dockerfile
FROM debian:latest

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install tftpd-hpa -y -qq && \
apt-get clean && rm -rf /var/lib/apt/lists/*

CMD echo -n "Starting $(in.tftpd --version)" && \
in.tftpd --foreground --create --secure --ipv4 --verbose --user tftp \
--address 0.0.0.0:69 --blocksize 1468 /srv/tftp
```

In the same directory, create a file named `docker-compose.yml` with the
following content:
```yaml
version: '3.9'
services:
  tftpd-hpa:
    build: .
    container_name: tftp
    network_mode: 'host'
    restart: unless-stopped
    volumes:
      - ./tftp:/srv/tftp
```

### Start the container
```bash
docker-compose up -d
```
Docker will build an image if necessary and launch it in the background. During
building the container, Docker will also create `tftp/` subdirectory from which
your files will be served. Docker acts as user `systemd-network` from group
`input` to access that directory. If you want to allow saving files sent via
TFTP to your machine you'll need to change ownership on that directory:
```bash
sudo chown systemd-network:input ./tftp
```
Alternatively, you may loosen permissions on that directory:
```bash
sudo chmod 777 ./tftp
```
Use your computer's IP address to access the TFTP server from other machines on
your local network.

### Stop the container
To stop the container and free up memory just run
```bash
docker-compose stop
```
The container will be saved on your computer until the next time you need to
start it.


[1]: https://docs.docker.com/compose/install/