DEV Community

suin
suin

Posted on

How to Easily Run Syncthing with Docker Compose

Syncthing is a powerful file synchronization tool, and when combined with Docker Compose, it becomes even easier to manage and deploy. This guide will walk you through the process of setting up and running Syncthing using Docker Compose, from initial setup to troubleshooting common issues.

1. Preparation

First, let's create a directory for Syncthing:

mkdir -p ~/data
Enter fullscreen mode Exit fullscreen mode

Note: Creating this directory in advance helps prevent permission issues later on.

2. Creating the docker-compose.yml File

Create a docker-compose.yml file in your home directory with the following content:

services:
  syncthing:
    image: syncthing/syncthing
    container_name: syncthing
    hostname: my-linux
    environment:
      - PUID=1000
      - PGID=1000
    volumes:
      - ./data:/var/syncthing
    network_mode: host
    restart: unless-stopped
Enter fullscreen mode Exit fullscreen mode

Explanation of Configuration

Let's break down the key components of this configuration:

  • container_name: syncthing

    • This sets a friendly name for your container, making it easier to manage in your Docker environment.
  • hostname: my-linux

    • This will be used as Syncthing's node name. Choose a name that's easily identifiable on your network.
  • environment:

    • PUID=1000 and PGID=1000
    • These set the user and group IDs for the container.
    • This ensures that files created within the container match your host user's permissions.
    • Replace these values with your actual UID and GID, which you can find by running id -u and id -g on your host machine.
  • volumes:

    • - ./data:/var/syncthing
    • This mounts the ./data directory from your host to /var/syncthing in the container.
    • This setup persists Syncthing's data and configuration, even if the container is recreated.
  • network_mode: host

    • This allows the container to use the host's network stack.
    • It enables Syncthing to properly detect other devices on your local network.
  • restart: unless-stopped

    • This ensures that the container automatically restarts if the Docker daemon restarts or if your host machine reboots.
    • However, it won't restart if you manually stop the container.

3. Starting the Container

Launch the container with this command:

docker-compose up -d
Enter fullscreen mode Exit fullscreen mode

4. Troubleshooting

Certificate Generation Error

If you encounter an error like this:

Failed to load/generate certificate: save cert: open /var/syncthing/config/cert.pem: permission denied
Enter fullscreen mode Exit fullscreen mode

It's likely due to a permissions issue with the ~/data directory. Here's how to fix it:

  1. Check the directory ownership:
ls -la ~/data
Enter fullscreen mode Exit fullscreen mode
  1. Change the ownership to your user:
sudo chown -R $(id -un):$(id -gn) ~/data
Enter fullscreen mode Exit fullscreen mode

Conclusion

By following these steps, you can easily set up and run Syncthing using Docker Compose. This method simplifies the management of Syncthing and integrates well with other Docker-based applications.

For more detailed information on configuring and using Syncthing, refer to the official Syncthing documentation.

Top comments (0)