Docker update and security checks
9.5K
The image runs the DockerUpdateGuard web UI and background workers. It connects to:
The container listens on port 8080.
At minimum, provide:
Example:
docker run -d \
--name dockerupdateguard \
-p 8080:8080 \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
-v /path/to/appsettings.json:/app/appsettings.json:ro \
networlddev/dockerupdateguard:latest
If the image should inspect the Docker Engine of the Linux host it runs on, bind-mount the Unix socket:
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock
and configure the matching Docker instance URL in appsettings.json, for example:
{
"DockerUpdateGuard": {
"DockerInstances": [
{
"Name": "Local Docker",
"BaseUrl": "unix:///var/run/docker.sock",
"Enabled": true
}
]
}
}
Both are required. Mounting the socket without setting the matching BaseUrl, or configuring the BaseUrl without mounting the socket, is not enough.
All configuration should be provided via appsettings.json (or appsettings.{Environment}.json). When running in a container, mount your configuration file into the container's content root, for example: -v /path/to/appsettings.json:/app/appsettings.json:ro.
Common JSON paths:
| JSON path | Purpose |
|---|---|
ConnectionStrings:DockerUpdateGuard | PostgreSQL connection string |
DockerUpdateGuard:DockerInstances[0]:Name | Display name of the first Docker instance |
DockerUpdateGuard:DockerInstances[0]:BaseUrl | Docker endpoint such as unix:///var/run/docker.sock |
DockerUpdateGuard:DockerHub:UserName | Optional Docker Hub username |
DockerUpdateGuard:DockerHub:Pat | Optional Docker Hub personal access token |
DockerUpdateGuard:Vulnerabilities:Enabled | Enables vulnerability refresh |
DockerUpdateGuard:Vulnerabilities:Provider | None, DockerScout, or Trivy |
DockerUpdateGuard:Vulnerabilities:TrivyBaseUrl | Required when Provider=Trivy |
Telemetry:OtlpEndpoint | Optional OTLP collector endpoint |
DockerUpdateGuard:DisplayVersion | Version label shown in the UI; set by the image build argument |
Common mounts for containerized deployments:
| Mount | When needed |
|---|---|
/var/run/docker.sock | Required for Linux host Docker Engine access through the Unix socket |
/app/appsettings.json (mount file) | Application configuration (appsettings.json) |
/app/certs (directory) | Optional: client certificates for TLS-secured Docker engine access |
Client certificates
When a Docker Engine endpoint requires TLS client authentication, mount the certificate files into the container and set the instance's CertificatePath in appsettings.json to the in-container file path. Recommended pattern:
/opt/dockerupdateguard/certs/) and mount read-only into the container:-v /opt/dockerupdateguard/certs:/app/certs:ro
/app/certs) and reference that path from CertificatePath.Automatic CA import on startup
The published image now includes a small entrypoint script that will import any PEM/CRT files found under /app/certs into the container's system trust store at startup (it copies them into /usr/local/share/ca-certificates and runs update-ca-certificates). The image also ensures the ca-certificates package is available. Behavior:
/app/certs contains one or more *.crt/*.pem files and the container has permission to write the system trust store (typically when run as root), the root certificates are imported automatically and become trusted by HttpClient, Npgsql, and other system TLS consumers.Certificate formats and usage
ca-root.crt or ca-root.pem). This is sufficient for the runtime to validate HTTPS servers for PostgreSQL, Portainer, Trivy, etc./app/certs and set the Docker instance CertificatePath to the in-container file path (e.g. /app/certs/client.pfx). The application will load PFX/.p12 or PEM client certificates when the CertificatePath points to a readable file.Example appsettings.json snippet (root CA used by Postgres + client cert for a Docker instance):
{
"ConnectionStrings": {
"DockerUpdateGuard": "Host=db.example.local;Port=5432;Database=dug;Username=user;Password=pass;Ssl Mode=VerifyFull;Trust Server Certificate=false;Root Certificate=/app/certs/ca-root.crt"
},
"DockerUpdateGuard": {
"DockerInstances": [
{
"Name": "Remote Engine",
"BaseUrl": "https://docker.example.local:2376",
"UseTls": true,
"CertificatePath": "/app/certs/client.pfx"
}
],
"Vulnerabilities": {
"Provider": "Trivy",
"TrivyBaseUrl": "https://trivy.example.local:4954"
}
}
}
Run example (optional certificates mount):
docker run -d \
--name dockerupdateguard \
-p 8080:8080 \
-v /path/to/appsettings.json:/app/appsettings.json:ro \
-v /opt/dockerupdateguard/certs:/app/certs:ro \ # optional: root CA, client certs
networlddev/dockerupdateguard:latest
Permissions and security
Notes
The image needs outbound access to:
Content type
Image
Digest
sha256:cf234e90e…
Size
103.5 MB
Last updated
about 1 month ago
docker pull networlddev/dockerupdateguard