Skip to content

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:

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:

Terminal
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.

  1. Pull the image (optional: docker run pulls it anyway, but this surfaces login or network problems early):

    Terminal
    docker pull prosolgrp/mvsharp:5.0.58
    
  2. Create the data volume (optional: Docker creates it automatically on first run):

    Terminal
    docker volume create mvsharp-accounts
    
  3. Run the container:

    Terminal
    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
    

    Docker prints the new container ID.

  4. Verify it is running:

    Terminal
    docker ps --filter name=mvsharp
    docker logs -f mvsharp
    

    STATUS should read Up and PORTS should 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:

Terminal
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.

Terminal
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.

  1. Take a backup (see Backup and restore).

  2. Pull the new version, replacing <new-version> with the release tag:

    Terminal
    docker pull prosolgrp/mvsharp:<new-version>
    
  3. Remove the old container (the volume is kept):

    Terminal
    docker stop mvsharp
    docker rm mvsharp
    
  4. Start the new version: run the same docker run command as in Installation steps, with the new tag at the end.

  5. Check it: run docker logs -f mvsharp and 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:

Terminal
docker rm -f mvsharp
docker rmi prosolgrp/mvsharp:5.0.58

To also delete all account data permanently, take a backup first, then run:

Terminal
docker volume rm mvsharp-accounts

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.

  1. Get the container ID:

    Terminal
    $ docker ps
    

    The container ID is in the first column of the output:

    Output
    CONTAINER 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
    
  2. Open a root shell in the container, using that ID (or simply the name mvsharp):

    Terminal
    $ docker exec -it -u root 64a6a6c7043e bash
    
  3. Add a user with adduser. For example, to add a user called test:

    Terminal
    root@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:

Terminal
$ ssh mvsharp@localhost -p 2222

A successful login looks like this:

Output
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.

  1. Log into the container as root using docker exec (see Accessing the container as root).

  2. Add the printer by running this command from bash:

    Terminal
    lpadmin -p P127 -E \
      -v smb://mvsharp:mvsharp@WORKGROUP/192.168.68.81/P127 \
      -m drv:///cupsfilters.drv/textonly.ppd \
      -o printer-is-shared=false
    
  3. Make it the default printer:

    Terminal
    lpadmin -d P127
    
  4. Enable the printer and let it accept jobs:

    Terminal
    cupsenable P127
    cupsaccept P127
    

In MVsharp, send output to the printer with SETPTR, then print as normal. For example:

MV BASIC
SETPTR 0,132,66,0,0,1,AT P127
LIST VOC SAMPLE 10