sdme
github.com/fiorix/sdme

Bind Mounts and OCI Volumes

Share files between host and containers using bind mounts and OCI volumes.

Bind mounts let you share directories between the host and a container. This is useful for serving content you're actively editing, sharing configuration files, or persisting data outside the container. See also the architecture documentation.

Bind mounts with a regular service

Building on the running long-lived services tutorial, create a directory on the host with some content:

mkdir -p /tmp/mysite
echo '<h1>Hello from sdme</h1>' > /tmp/mysite/index.html

Create a container with a bind mount mapping that directory into nginx's document root as a subdirectory:

sudo sdme new mywebserver -r fedora -b /tmp/mysite:/usr/share/nginx/html/example

Inside the container, install and start nginx:

dnf install -y nginx
systemctl enable --now nginx

From the host, verify:

curl http://localhost/example/

Note the trailing slash: without it, nginx returns a redirect error.

You should see "Hello from sdme". Now edit the file on the host:

echo '<h1>Updated content</h1>' > /tmp/mysite/index.html

Curl again and the change is immediately visible, no restart needed. The default nginx page at http://localhost is unaffected.

Tip

We bind-mount to a subdirectory (example/) rather than replacing the entire HTML root. Replacing it can conflict with the default nginx installation on some distros (e.g. Fedora's index.html is a symlink that breaks when the directory is overlaid).

Append :ro to make a bind mount read-only (e.g. -b /host/path:/container/path:ro). Avoid mounting over system directories like /etc or /usr as it can break the container. See sdme new --help for the full syntax.

Bind mounts with an OCI application

When using an OCI application, the app runs chrooted under /oci/apps/{name}/root inside the container. Bind mount paths need to target that prefix.

Following the OCI tutorial, after importing nginx with sudo sdme fs import nginx docker.io/nginx --base-fs ubuntu, you can bind-mount a host directory to the nginx HTML root:

sudo sdme create mywebserver -r nginx -b /tmp/mysite:/oci/apps/nginx/root/usr/share/nginx/html --started
sudo sdme ps

From the host:

curl http://localhost

The same content from /tmp/mysite is served by nginx.

--started tells sdme to start the container immediately after creating it. Without it, you would need a separate sdme start command. sdme new combines create, start, and drops you into a shell.

OCI auto-volumes

Some OCI images declare volumes for data directories that should persist independently from the container. sdme detects these and manages them automatically. See the OCI volumes with PostgreSQL tutorial for a complete walkthrough.