MVsharp on Docker¶
How to deploy, configure and run MVsharp in Docker containers.
Introduction¶
This guide explains how to deploy, configure and run MVsharp in Docker containers. It covers pulling or building the MVsharp image, starting your first container, keeping your MultiValue data safe in persistent storage, and running MVsharp in production. The goal is a repeatable, portable MVsharp environment that you can bring up the same way on a developer's laptop, a test server or a cloud host.
Running MVsharp in a Docker container provides a clean, simple installation of a complete MVsharp environment that runs on many different platforms and architectures. A single command installs a complete, running MVsharp system on Windows, Linux or macOS, on either Intel or ARM hardware.
Running MVsharp in Docker brings several practical benefits:
- Consistency. Every environment runs the same image, which removes "it works on my machine" problems between development, testing and production.
- Fast setup. A working MVsharp instance can be up in minutes, without installing it by hand on each server.
- Isolation. MVsharp and its dependencies are kept separate from the host system and from other applications.
- Easier upgrades and rollbacks. Moving to a new MVsharp version means switching to a newer image tag. Going back means switching to the previous one.
- Scalability and cloud readiness. Containers fit easily into orchestration platforms such as Docker Compose, Kubernetes and the managed container services of the major cloud providers.
- Less administration. Standard container tooling handles much of the work that used to need a dedicated MultiValue system administrator.
Prerequisites¶
Before you deploy MVsharp on Docker, make sure the host system, software, network and access requirements below are in place.
Hardware requirements¶
The host needs at least the following resources:
| Resource | Minimum | Recommended (production) |
|---|---|---|
| CPU | 2 cores (64-bit x86_64, or ARM64 if supported) | 4 or more cores |
| Memory (RAM) | 4 GB | 8–16 GB or more, depending on users and data volume |
| Disk space | 20 GB free | SSD storage sized for your MultiValue data, plus at least twice that for backups and image updates |
| Virtualisation | Hardware virtualisation (VT-x / AMD-V) enabled in BIOS/UEFI (needed for Docker Desktop on Windows and macOS) | — |
Note
These figures are for the MVsharp container itself. Add the resources needed by any other containers, applications or services on the same host.
Supported host operating systems¶
MVsharp containers can run on any host that supports Docker, including:
- Linux (recommended for production): Ubuntu 22.04/24.04 LTS, Debian 12, RHEL/Rocky/AlmaLinux 8 or 9, or other current 64-bit distributions.
- Windows 10/11 Pro or Enterprise, or Windows Server, using Docker Desktop with the WSL 2 backend (best suited to development and testing).
- macOS using Docker Desktop (development and testing only).
- Cloud platforms, for example Azure, AWS or Google Cloud VMs, or managed container services such as Azure Container Instances, AWS ECS or Kubernetes (AKS, EKS, GKE).
Required software¶
Install the following software on the host:
| Software | Version | Notes |
|---|---|---|
| Docker Engine (Linux) or Docker Desktop (Windows/macOS) | 24.0 or later | Check with docker --version |
| Docker Compose | v2.x | Included with Docker Desktop. On Linux, install the docker-compose-plugin package. Check with docker compose version |
| WSL 2 (Windows hosts only) | Latest | Check with wsl --status |
| Text editor | Any | For editing docker-compose.yml and configuration files |
Installation¶
Installing Docker¶
The installation steps for Docker depend on the operating system and CPU architecture. Follow the official guide for your platform:
- Linux: Install Docker Engine
- Windows: Install Docker Desktop on Windows
- macOS: Install Docker Desktop on Mac
Installing MVsharp Docker¶
This guide installs MVsharp 5.0.58 as a single Docker container named mvsharp, with account data kept in a named volume so it survives restarts and upgrades. The whole install is one command:
docker run -d --name mvsharp --restart unless-stopped \
-v mvsharp-accounts:/opt/mvsharp/accounts \
-p 2222:22 \
-p 8999-9003:8999-9003 \
-p 2022-2023:2022-2023 \
-p 1433:1433 \
-p 9005:9005 \
prosolgrp/mvsharp:5.0.58
The rest of this section covers running and verifying the container, and keeping it backed up and up to date.
Installation steps¶
Installation takes four steps: pull, create the volume, run, verify.
-
Pull the image (optional:
docker runpulls it anyway, but this surfaces login or network problems early): -
Create the data volume (optional: Docker creates it automatically on first run):
-
Run the container:
Terminaldocker run -d --name mvsharp --restart unless-stopped \ -v mvsharp-accounts:/opt/mvsharp/accounts \ -p 2222:22 \ -p 8999-9003:8999-9003 \ -p 2022-2023:2022-2023 \ -p 1433:1433 \ -p 9005:9005 \ prosolgrp/mvsharp:5.0.58Docker prints the new container ID.
-
Verify it is running:
STATUSshould readUpandPORTSshould list all the mappings. Press Ctrl+C to stop following the logs; the container keeps running.
Windows PowerShell
Use a backtick instead of \ at the end of each continued line, or put the command on one line.
Command and port reference¶
| Option | What it does |
|---|---|
-d |
Runs the container in the background. |
--name mvsharp |
Names the container so later commands can refer to it as mvsharp. |
--restart unless-stopped |
Restarts it after crashes and host reboots, unless you stopped it manually. |
-v mvsharp-accounts:/opt/mvsharp/accounts |
Stores MVsharp accounts in the named volume mvsharp-accounts, outside the container. |
prosolgrp/mvsharp:5.0.58 |
The image and pinned version to run. |
Each -p flag maps a host port (left) to a container port (right). Only SSH is remapped, from 22 to 2222.
| Host port | Container port | Purpose |
|---|---|---|
| 2222 | 22 | SSH into the container |
| 1433 | 1433 | SQL Server-style (TDS) client connections |
| 2022–2023 | 2022–2023 | MVsharp service ports (SSH and Telnet terminal access) |
| 8999–9003 | 8999–9003 | MVsharp service ports |
| 9005 | 9005 | MVsharp service port |
To use a different host port, change only the left-hand number, for example -p 11433:1433 if 1433 is already taken.
Clients connect to the Docker host's IP address or hostname on the host ports, not to the container directly:
- SSH:
ssh -p 2222 <user>@<docker-host>. Use the MVsharp login credentials supplied by Prosol. - SQL / TDS clients: point the client at
<docker-host>,1433(or<docker-host>:1433, depending on the client). - Other MVsharp services: configure clients for
<docker-host>with the matching port from the table above.
Day-to-day operations¶
| Task | Command |
|---|---|
| Check status | docker ps --filter name=mvsharp |
| View recent logs | docker logs --tail 200 mvsharp |
| Follow logs | docker logs -f mvsharp |
| Stop | docker stop mvsharp |
| Start | docker start mvsharp |
| Restart | docker restart mvsharp |
| Shell inside the container | docker exec -it mvsharp bash |
| Resource usage | docker stats mvsharp |
Note
A container stopped with docker stop stays stopped after a host reboot; that is how unless-stopped behaves. Use docker start mvsharp to bring it back.
Backup and restore¶
All account data lives in the mvsharp-accounts volume, so backing up that volume backs up MVsharp. Stop the container first so files are not changing mid-copy.
Back up to a dated archive in the current directory:
docker stop mvsharp
docker run --rm -v mvsharp-accounts:/data -v "$PWD":/backup alpine \
tar czf /backup/mvsharp-accounts-$(date +%F).tar.gz -C /data .
docker start mvsharp
Warning
Restoring from an archive overwrites the current data.
docker stop mvsharp
docker run --rm -v mvsharp-accounts:/data -v "$PWD":/backup alpine \
sh -c "rm -rf /data/* && tar xzf /backup/mvsharp-accounts-YYYY-MM-DD.tar.gz -C /data"
docker start mvsharp
Copy archives off the host, and test a restore on a spare machine before you rely on them.
Upgrading¶
To upgrade, back up the volume, replace the container with one on the new tag, and reuse the same volume. Data is untouched because it lives in the volume, not the container.
-
Take a backup (see Backup and restore).
-
Pull the new version, replacing
<new-version>with the release tag: -
Remove the old container (the volume is kept):
-
Start the new version: run the same
docker runcommand as in Installation steps, with the new tag at the end. -
Check it: run
docker logs -f mvsharpand test a client connection.
To roll back, repeat steps 3–4 with tag 5.0.58, restoring the backup first if the new version changed the data.
Troubleshooting¶
| Symptom | Likely cause and fix |
|---|---|
port is already allocated / address already in use |
Another service uses that host port. Find it with sudo ss -ltnp \| grep :<port>, stop it, or map a different host port. |
Conflict. The container name "/mvsharp" is already in use |
A previous container exists. Run docker rm -f mvsharp, then run again. The volume is not affected. |
pull access denied / repository does not exist |
Not logged in, or no access to the image. Run docker login with an account Prosol has granted access. |
| Container keeps restarting | Check docker logs mvsharp for the startup error. |
| Clients cannot connect | Confirm docker ps shows the port, then check the host firewall and any network firewall between client and host. |
| SSH host key warning after an upgrade | The new container has a new host key. Remove the old entry with ssh-keygen -R "[<docker-host>]:2222". |
Uninstalling¶
To remove the container and image but keep your data:
To also delete all account data permanently, take a backup first, then run:
User Management and Access¶
The default container is configured with a single user, mvsharp, with the password mvsharp.
Warning
Use this account only for initial access, and change its password as soon as possible: a default password is a security risk.
Accessing the container as root¶
To manage users, you need to access the container as root.
-
Get the container ID:
The container ID is in the first column of the output:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 64a6a6c7043e prosolgrp/mvsharp:5.0.58 "/usr/bin/docker-ent…" 19 hours ago Up 12 minutes 0.0.0.0:1433->1433/tcp, 0.0.0.0:2022-2023->2022-2023/tcp, 0.0.0.0:8999-9003->8999-9003/tcp, 0.0.0.0:9005->9005/tcp, 9007/tcp, 0.0.0.0:2222->22/tcp mvsharp -
Open a root shell in the container, using that ID (or simply the name
mvsharp): -
Add a user with
adduser. For example, to add a user calledtest:Terminalroot@64a6a6c7043e:/# adduser test Adding user `test' ... Adding new group `test' (1001) ... Adding new user `test' (1001) with group `test (1001)' ... Creating home directory `/home/test' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for test Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] Y Adding new user `test' to supplemental / extra groups `users' ... Adding user `test' to group `users' ... root@64a6a6c7043e:/#
Accessing the container over SSH¶
The container shares the IP address of the Docker host, so its SSH server is published on a different port to avoid clashing with the host's own SSH. Connect to port 2222:
A successful login looks like this:
Linux 64a6a6c7043e 7.0.0-42-generic #42-Ubuntu SMP PREEMPT_DYNAMIC Thu Oct 15 08:19:15 UTC 2026 aarch64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Nov 10 09:23:45 2026 from 172.17.0.1
mvsharp@64a6a6c7043e:~$
User access¶
MVsharp supports Telnet and SSH access for terminal clients. Connecting to these ports logs you straight into an MVsharp shell:
| Protocol | Port |
|---|---|
| SSH | 2022 |
| Telnet | 2023 |
Printing from MVsharp¶
The MVsharp container includes a CUPS print server, which MVsharp uses to print to devices. The container also includes smbclient, so it can print to printers shared from Windows PCs.
Printing to a Windows shared printer¶
In this example, a Windows PC at 192.168.68.81 shares a printer called P127. The MVsharp container reaches it over SMB.
-
Log into the container as root using
docker exec(see Accessing the container as root). -
Add the printer by running this command from
bash: -
Make it the default printer:
-
Enable the printer and let it accept jobs:
In MVsharp, send output to the printer with SETPTR, then print as normal. For example: