Hello,
Thank you for the quick reply.
Here’s my full configuration and log.
docker-compose.yaml:
version: "3.3"
services:
orthanc:
image: osimis/orthanc:latest
ports:
- 4242:4242
- 4343:4343
- 8042:8042
environment:
ORTHANC_NAME: "Orthanc"
VERBOSE_ENABLED: "true"
VERBOSE_STARTUP: "true"
#DCMDICTPATH: /etc/orthanc/dicom.dic
volumes:
- ./orthanc.json:/etc/orthanc/orthanc.json:ro
- ./orthanc-db/:/var/lib/orthanc/db/
#- ./dicom.dic:/etc/orthanc/dicom.dic
orthanc.json:
{
"Name" : "${ORTHANC_NAME}",
"StorageDirectory": "/var/lib/orthanc/db",
"IndexDirectory": "/var/lib/orthanc/db",
"Plugins": ["/usr/share/orthanc/plugins", "/usr/local/share/orthanc/plugins"],
"DicomServerEnabled": true,
"DicomAet": "ORTHANC",
"DicomCheckCalledAet": false,
"DicomPort": 4242,
"DicomModalitiesInDatabase": false,
"DicomAlwaysAllowEcho": true,
"DicomAlwaysAllowStore": true,
"DicomCheckModalityHost": false,
"RemoteAccessAllowed": true,
"SslEnabled": false,
"AuthenticationEnabled": false,
"MultitenantDicom" : {
"Servers" : [
{
"AET" : "ORTHANC_2",
"Port" : 4343,
"Labels" : [ "TestLabel" ],
"LabelsConstraint" : "All",
"LabelsStoreLevels" : [ "Patient", "Study", "Series", "Instance" ]
}
]
}
}
docker logs:
Attaching to multitenant_orthanc_1
orthanc_1 | Generating random hostid in /etc/hostid: e785a0b2
orthanc_1 | Discovering configuration files from /etc/orthanc/*.json
orthanc_1 | Discovering configuration files from /run/secrets/*.json
orthanc_1 | reading configuration from /etc/orthanc/orthanc.json
orthanc_1 | Analyzing environment variables
orthanc_1 | Analyzing secrets
orthanc_1 | going through all enabled plugins
orthanc_1 | Gdcm is enabled
orthanc_1 | Applying defaults for Gdcm plugin
orthanc_1 | Installing .so file for Gdcm plugin
orthanc_1 | Linked /usr/share/orthanc/plugins-available/libOrthancGdcm.so -> /usr/share/orthanc/plugins/libOrthancGdcm.so
orthanc_1 | MultitenantDicom is enabled
orthanc_1 | Installing .so file for MultitenantDicom plugin
orthanc_1 | Linked /usr/share/orthanc/plugins-available/libMultitenantDicom.so -> /usr/share/orthanc/plugins/libMultitenantDicom.so
orthanc_1 | OrthancExplorer2 is enabled
orthanc_1 | Applying defaults for OrthancExplorer2 plugin
orthanc_1 | Installing .so file for OrthancExplorer2 plugin
orthanc_1 | Linked /usr/share/orthanc/plugins-available/libOrthancExplorer2.so -> /usr/share/orthanc/plugins/libOrthancExplorer2.so
orthanc_1 | generated configuration file: {
orthanc_1 | "Name": "${ORTHANC_NAME}",
orthanc_1 | "StorageDirectory": "/var/lib/orthanc/db",
orthanc_1 | "IndexDirectory": "/var/lib/orthanc/db",
orthanc_1 | "Plugins": [
orthanc_1 | "/usr/share/orthanc/plugins",
orthanc_1 | "/usr/local/share/orthanc/plugins"
orthanc_1 | ],
orthanc_1 | "DicomServerEnabled": true,
orthanc_1 | "DicomAet": "ORTHANC",
orthanc_1 | "DicomCheckCalledAet": false,
orthanc_1 | "DicomPort": 4242,
orthanc_1 | "DicomModalitiesInDatabase": false,
orthanc_1 | "DicomAlwaysAllowEcho": true,
orthanc_1 | "DicomAlwaysAllowStore": true,
orthanc_1 | "DicomCheckModalityHost": false,
orthanc_1 | "RemoteAccessAllowed": true,
orthanc_1 | "SslEnabled": false,
orthanc_1 | "AuthenticationEnabled": false,
orthanc_1 | "MultitenantDicom": {
orthanc_1 | "Servers": [
orthanc_1 | {
orthanc_1 | "AET": "ORTHANC_2",
orthanc_1 | "Port": 4343,
orthanc_1 | "Labels": [
orthanc_1 | "TestLabel"
orthanc_1 | ],
orthanc_1 | "LabelsConstraint": "All",
orthanc_1 | "LabelsStoreLevels": [
orthanc_1 | "Patient",
orthanc_1 | "Study",
orthanc_1 | "Series",
orthanc_1 | "Instance"
orthanc_1 | ]
orthanc_1 | }
orthanc_1 | ]
orthanc_1 | },
orthanc_1 | "HttpsCACertificates": "/etc/ssl/certs/ca-certificates.crt",
orthanc_1 | "Gdcm": {
orthanc_1 | "Throttling": 4,
orthanc_1 | "RestrictTransferSyntaxes": [
orthanc_1 | "1.2.840.10008.1.2.4.90",
orthanc_1 | "1.2.840.10008.1.2.4.91",
orthanc_1 | "1.2.840.10008.1.2.4.92",
orthanc_1 | "1.2.840.10008.1.2.4.93"
orthanc_1 | ]
orthanc_1 | },
orthanc_1 | "OrthancExplorer2": {
orthanc_1 | "Enable": true,
orthanc_1 | "IsDefaultOrthancUI": false
orthanc_1 | }
orthanc_1 | }
orthanc_1 | generating temporary configuration file in /tmp/orthanc.json
orthanc_1 | Startup command: exec "Orthanc --verbose /tmp/orthanc.json"
orthanc_1 | W0626 10:54:22.955790 main.cpp:2034] Orthanc version: 1.12.0
orthanc_1 | I0626 10:54:22.956016 main.cpp:2066] Architecture: 64-bit, little endian
orthanc_1 | W0626 10:54:22.956205 OrthancConfiguration.cpp:57] Reading the configuration from: "/tmp/orthanc.json"
orthanc_1 | I0626 10:54:22.957117 Toolbox.cpp:1528] Using locale: "en_US.UTF-8" for case-insensitive comparison of strings
orthanc_1 | I0626 10:54:22.957385 Toolbox.cpp:1824] OpenSSL version: OpenSSL 3.1.0
orthanc_1 | I0626 10:54:22.958199 FromDcmtkBridge.cpp:294] (dicom) Using DCMTK version: 367
orthanc_1 | I0626 10:54:22.958381 FromDcmtkBridge.cpp:302] (dicom) Loading the embedded dictionaries
orthanc_1 | I0626 10:54:22.968885 FromDcmtkBridge.cpp:314] (dicom) Loading the embedded dictionary of private tags
orthanc_1 | I0626 10:54:22.975412 FromDcmtkBridge.cpp:2454] (dicom) Registering JPEG Lossless codecs in DCMTK
orthanc_1 | I0626 10:54:22.975589 FromDcmtkBridge.cpp:2462] (dicom) Registering JPEG codecs in DCMTK
orthanc_1 | I0626 10:54:22.975638 FromDcmtkBridge.cpp:2469] (dicom) Registering RLE codecs in DCMTK
orthanc_1 | I0626 10:54:22.975708 Enumerations.cpp:2358] Default encoding for DICOM was changed to: Latin1
orthanc_1 | I0626 10:54:22.984766 OrthancInitialization.cpp:380] Calling mallopt(M_ARENA_MAX, 5)
orthanc_1 | W0626 10:54:22.985069 main.cpp:911] Loading plugin(s) from: /usr/share/orthanc/plugins
orthanc_1 | I0626 10:54:22.985149 PluginsManager.cpp:280] (plugins) Scanning folder /usr/share/orthanc/plugins for plugins
orthanc_1 | I0626 10:54:22.985317 PluginsManager.cpp:303] (plugins) Found a shared library: "/usr/share/orthanc/plugins/libOrthancExplorer2.so"
orthanc_1 | W0626 10:54:22.986376 PluginsManager.cpp:261] Registering plugin 'orthanc-explorer-2' (version 0.9.3)
orthanc_1 | W0626 10:54:22.986738 PluginsManager.cpp:157] Root URI to the Orthanc-Explorer 2 application: /ui/
orthanc_1 | I0626 10:54:22.986784 OrthancPlugins.cpp:2713] (plugins) Plugin has registered a REST callback without mutual exclusion on: /ui/app/assets/(.*)
orthanc_1 | I0626 10:54:22.986884 OrthancPlugins.cpp:2713] (plugins) Plugin has registered a REST callback without mutual exclusion on: /ui/app/index.html
orthanc_1 | I0626 10:54:22.986971 OrthancPlugins.cpp:2713] (plugins) Plugin has registered a REST callback without mutual exclusion on: /ui/app/token-landing.html
orthanc_1 | I0626 10:54:22.987049 OrthancPlugins.cpp:2713] (plugins) Plugin has registered a REST callback without mutual exclusion on: /ui/app/retrieve-and-view.html
orthanc_1 | I0626 10:54:22.987129 OrthancPlugins.cpp:2713] (plugins) Plugin has registered a REST callback without mutual exclusion on: /ui/app/favicon.ico
orthanc_1 | I0626 10:54:22.987208 OrthancPlugins.cpp:2713] (plugins) Plugin has registered a REST callback without mutual exclusion on: /ui/app/(.*)
orthanc_1 | I0626 10:54:22.987295 OrthancPlugins.cpp:2713] (plugins) Plugin has registered a REST callback without mutual exclusion on: /ui/app
orthanc_1 | I0626 10:54:22.987385 OrthancPlugins.cpp:2713] (plugins) Plugin has registered a REST callback without mutual exclusion on: /ui/api/configuration
orthanc_1 | I0626 10:54:22.987469 OrthancPlugins.cpp:2713] (plugins) Plugin has registered a REST callback without mutual exclusion on: /ui/api/pre-login-configuration
orthanc_1 | I0626 10:54:22.987559 OrthancPlugins.cpp:2755] (plugins) Plugin has registered an OnChange callback
orthanc_1 | I0626 10:54:22.987618 PluginsManager.cpp:303] (plugins) Found a shared library: "/usr/share/orthanc/plugins/libOrthancGdcm.so"
orthanc_1 | W0626 10:54:22.997655 PluginsManager.cpp:261] Registering plugin 'gdcm' (version 1.5)
orthanc_1 | W0626 10:54:22.998030 PluginsManager.cpp:157] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.90
orthanc_1 | W0626 10:54:22.998085 PluginsManager.cpp:157] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.91
orthanc_1 | W0626 10:54:22.998134 PluginsManager.cpp:157] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.92
orthanc_1 | W0626 10:54:22.998171 PluginsManager.cpp:157] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.93
orthanc_1 | W0626 10:54:22.998219 PluginsManager.cpp:157] Throttling GDCM to 4 concurrent thread(s)
orthanc_1 | W0626 10:54:22.998265 PluginsManager.cpp:157] Version of GDCM: 3.0.10
orthanc_1 | I0626 10:54:22.998331 OrthancPlugins.cpp:2828] (plugins) Plugin has registered a callback to decode DICOM images (1 decoder(s) now active)
orthanc_1 | I0626 10:54:22.998430 OrthancPlugins.cpp:2841] (plugins) Plugin has registered a callback to transcode DICOM images (1 transcoder(s) now active)
orthanc_1 | I0626 10:54:22.998549 PluginsManager.cpp:303] (plugins) Found a shared library: "/usr/share/orthanc/plugins/libMultitenantDicom.so"
orthanc_1 | W0626 10:54:23.001913 PluginsManager.cpp:261] Registering plugin 'multitenant-dicom' (version 1.12.0)
orthanc_1 | I0626 10:54:23.002125 OrthancPlugins.cpp:2755] (plugins) Plugin has registered an OnChange callback
orthanc_1 | I0626 10:54:23.002484 PluginsManager.cpp:161] (plugins) Setting timeout for DICOM connections if Orthanc acts as SCP (server): 30 seconds (0 = no timeout)
orthanc_1 | W0626 10:54:23.002580 main.cpp:911] Loading plugin(s) from: /usr/local/share/orthanc/plugins
orthanc_1 | E0626 10:54:23.002718 PluginsManager.cpp:234] Inexistent path to plugins: /usr/local/share/orthanc/plugins
orthanc_1 | W0626 10:54:23.002816 OrthancInitialization.cpp:420] SQLite index directory: "/var/lib/orthanc/db"
orthanc_1 | W0626 10:54:23.003493 OrthancInitialization.cpp:519] Storage directory: "/var/lib/orthanc/db"
orthanc_1 | I0626 10:54:23.007000 SQLiteDatabaseWrapper.cpp:1399] Version of the Orthanc database: 6
orthanc_1 | W0626 10:54:23.007137 HttpClient.cpp:1194] HTTPS will use the CA certificates from this file: /etc/ssl/certs/ca-certificates.crt
orthanc_1 | I0626 10:54:23.007263 HttpClient.cpp:515] (http) Setting the default timeout for HTTP client connections: 0 seconds
orthanc_1 | I0626 10:54:23.007381 HttpClient.cpp:499] (http) Setting the default proxy for HTTP client connections:
orthanc_1 | I0626 10:54:23.007460 DicomAssociationParameters.cpp:376] (dicom) Default timeout for DICOM connections if Orthanc acts as SCU (client): 10 seconds (0 = no timeout)
orthanc_1 | I0626 10:54:23.007760 ServerIndex.cpp:289] Starting the database flushing thread (sleep = 10 seconds)
orthanc_1 | I0626 10:54:23.007956 LuaJobManager.cpp:68] (lua) Lua: DICOM associations will be closed after 5 seconds of inactivity
orthanc_1 | I0626 10:54:23.008104 LuaScripting.cpp:774] Initializing Lua for the event handler
orthanc_1 | W0626 10:54:23.008314 LuaContext.cpp:94] Lua says: Lua toolbox installed
orthanc_1 | I0626 10:54:23.008489 LuaJobManager.cpp:68] (lua) Lua: DICOM associations will be closed after 5 seconds of inactivity
orthanc_1 | I0626 10:54:23.008589 LuaScripting.cpp:774] Initializing Lua for the event handler
orthanc_1 | W0626 10:54:23.008742 LuaContext.cpp:94] Lua says: Lua toolbox installed
orthanc_1 | I0626 10:54:23.008874 ServerContext.cpp:399] Automated transcoding of incoming DICOM instances is disabled
orthanc_1 | I0626 10:54:23.008962 ServerContext.cpp:406] (dicom) Deidentification of log contents (notably for DIMSE queries) is enabled
orthanc_1 | I0626 10:54:23.009025 ServerContext.cpp:410] (dicom) Version of DICOM standard used for deidentification is 2021b
orthanc_1 | I0626 10:54:23.009271 ServerContext.cpp:429] (dicom) Preferred transfer syntax for Orthanc C-STORE SCU: 1.2.840.10008.1.2.1
orthanc_1 | I0626 10:54:23.009283 ServerIndex.cpp:446] Starting the monitor for stable resources (stable age = 60)
orthanc_1 | I0626 10:54:23.009490 DcmtkTranscoder.cpp:76] Quality for lossy transcoding using DCMTK is set to: 90
orthanc_1 | W0626 10:54:23.009545 ServerContext.cpp:515] Disk compression is disabled
orthanc_1 | I0626 10:54:23.009623 ServerContext.cpp:1290] Storing MD5 for attachments: yes
orthanc_1 | W0626 10:54:23.009732 ServerIndex.cpp:381] No limit on the number of stored patients
orthanc_1 | W0626 10:54:23.009826 ServerIndex.cpp:401] No limit on the size of the storage area
orthanc_1 | W0626 10:54:23.009877 ServerIndex.cpp:420] Maximum Storage mode: Recycle
orthanc_1 | W0626 10:54:23.010246 ServerContext.cpp:244] Reloading the jobs from the last execution of Orthanc
orthanc_1 | W0626 10:54:23.010454 JobsEngine.cpp:272] The jobs engine has started with 2 threads
orthanc_1 | I0626 10:54:23.010454 JobsEngine.cpp:126] (jobs) Worker thread 0 has started
orthanc_1 | I0626 10:54:23.010642 DicomServer.cpp:134] (dicom) Setting timeout for DICOM connections if Orthanc acts as SCP (server): 30 seconds (0 = no timeout)
orthanc_1 | I0626 10:54:23.010880 DicomServer.cpp:422] (dicom) Orthanc SCP will *not* use DICOM TLS
orthanc_1 | I0626 10:54:23.010984 DicomServer.cpp:430] (dicom) The embedded DICOM server will use 4 threads
orthanc_1 | W0626 10:54:23.011246 main.cpp:1317] DICOM server listening with AET ORTHANC on port: 4242
orthanc_1 | I0626 10:54:23.011268 DicomServer.cpp:64] (dicom) DICOM server started
orthanc_1 | I0626 10:54:23.011440 HttpServer.cpp:1604] (http) This Orthanc server uses CivetWeb as its embedded HTTP server
orthanc_1 | I0626 10:54:23.011519 HttpServer.cpp:2112] (http) The embedded HTTP server will use 50 threads
orthanc_1 | I0626 10:54:23.011647 HttpServer.cpp:1953] (http) HTTP keep alive is enabled
orthanc_1 | I0626 10:54:23.011745 HttpServer.cpp:1967] (http) HTTP keep alive Timeout is now 1 seconds
orthanc_1 | W0626 10:54:23.011828 HttpServer.cpp:2036] HTTP compression is enabled
orthanc_1 | I0626 10:54:23.011941 HttpServer.cpp:2125] (http) TCP_NODELAY for the HTTP sockets is set to true
orthanc_1 | I0626 10:54:23.012014 HttpServer.cpp:2145] (http) Request timeout in the HTTP server is set to 30 seconds
orthanc_1 | W0626 10:54:23.012145 main.cpp:1048] ====> Remote access is enabled while user authentication is explicitly disabled, your setup is POSSIBLY INSECURE <====
orthanc_1 | I0626 10:54:23.012238 main.cpp:1161] Version of Lua: Lua 5.4
orthanc_1 | W0626 10:54:23.012343 main.cpp:1172] Remote LUA script execution is disabled
orthanc_1 | W0626 10:54:23.012395 main.cpp:1184] REST API can not write to the file system.
orthanc_1 | I0626 10:54:23.012468 HttpServer.cpp:2192] (http) Branching WebDAV bucket at: /webdav
orthanc_1 | I0626 10:54:23.012540 HttpServer.cpp:1649] (http) Starting embedded Web server using Civetweb
orthanc_1 | I0626 10:54:23.013902 OrthancWebDav.cpp:1696] Starting the WebDAV upload thread
orthanc_1 | W0626 10:54:23.014025 HttpServer.cpp:1794] HTTP server listening on port: 8042 (HTTPS encryption is disabled, remote access is allowed)
orthanc_1 | W0626 10:54:23.014263 main.cpp:923] Orthanc has started
orthanc_1 | I0626 10:54:23.014339 OrthancPlugins.cpp:3146] (plugins) Plugin making REST GET call on URI /plugins (built-in API)
orthanc_1 | I0626 10:54:23.014578 OrthancPlugins.cpp:3146] (plugins) Plugin making REST GET call on URI /plugins/gdcm (built-in API)
orthanc_1 | I0626 10:54:23.014736 OrthancPlugins.cpp:3146] (plugins) Plugin making REST GET call on URI /plugins/multitenant-dicom (built-in API)
orthanc_1 | I0626 10:54:23.014946 OrthancPlugins.cpp:3146] (plugins) Plugin making REST GET call on URI /plugins/orthanc-explorer-2 (built-in API)
orthanc_1 | I0626 10:54:23.015201 PluginsManager.cpp:161] (plugins) Orthanc SCP will *not* use DICOM TLS
orthanc_1 | I0626 10:54:23.015276 PluginsManager.cpp:161] (plugins) The embedded DICOM server will use 1 threads
orthanc_1 | W0626 10:54:23.015453 PluginsManager.cpp:157] Started multitenant DICOM server listening with AET ORTHANC_2 on port: 4343
orthanc_1 | I0626 10:54:23.015470 PluginsManager.cpp:161] (plugins) DICOM server started
orthanc_1 | I0626 10:54:23.015512 LuaScripting.cpp:868] Starting the Lua engine
orthanc_1 | I0626 10:54:23.015725 JobsEngine.cpp:126] (jobs) Worker thread 1 has started
+++ error starting here +++
orthanc_1 | I0626 10:54:27.340431 PluginsManager.cpp:161] (plugins) Association Received from AET DCMSEND on IP 10.0.0.50
orthanc_1 | I0626 10:54:27.340522 OrthancPlugins.cpp:3146] (plugins) Plugin making REST GET call on URI /tools/accepted-transfer-syntaxes (built-in API)
orthanc_1 | I0626 10:54:27.340771 PluginsManager.cpp:161] (plugins) Incoming connection from AET DCMSEND on IP 10.0.0.50, calling AET ORTHANC_2
orthanc_1 | I0626 10:54:27.340865 PluginsManager.cpp:161] (plugins) Association Acknowledged (Max Send PDV: 16372) to AET DCMSEND on IP 10.0.0.50
orthanc_1 | I0626 10:54:27.340959 PluginsManager.cpp:161] (plugins) Finishing association with AET DCMSEND on IP 10.0.0.50: Data dictionary missing
orthanc_1 | I0626 10:54:27.340972 PluginsManager.cpp:161] (plugins) DIMSE failure (aborting association with AET DCMSEND on IP 10.0.0.50): Data dictionary missing
+++ error ending here +++
orthanc_1 | I0626 10:58:58.386842 CommandDispatcher.cpp:333] (dicom) Association Received from AET DCMSEND on IP 10.0.0.50
orthanc_1 | I0626 10:58:58.387992 main.cpp:318] Incoming connection from AET DCMSEND on IP 10.0.0.50, calling AET ORTHANC_2
orthanc_1 | I0626 10:58:58.389368 CommandDispatcher.cpp:666] (dicom) Association Acknowledged (Max Send PDV: 16372) to AET DCMSEND on IP 10.0.0.50
orthanc_1 | I0626 10:58:58.395396 main.cpp:353] Incoming Store request from AET DCMSEND on IP 10.0.0.50, calling AET ORTHANC_2
orthanc_1 | I0626 10:58:58.416333 FilesystemStorage.cpp:125] Creating attachment "e2f0179e-a60f-46e5-a645-001ee0b1622c" of "DICOM" type (size: 1MB)
orthanc_1 | I0626 10:58:58.420881 ServerContext.cpp:683] New instance stored
orthanc_1 | I0626 10:58:58.424824 CommandDispatcher.cpp:931] (dicom) Finishing association with AET DCMSEND on IP 10.0.0.50: DUL Peer Requested Release
orthanc_1 | I0626 10:58:58.425010 CommandDispatcher.cpp:939] (dicom) Association Release with AET DCMSEND on IP 10.0.0.50
dcmsend gives me the following output:
dcmsend orthanc 4343 -aec ORTHANC_2 ".\test.ima"
E: Failed sending C-STORE request: 0006:020e DIMSE Failed to send message
E: 0006:031d TCP I/O Error (Eine vorhandene Verbindung wurde vom Remotehost geschlossen.) occurred in routine: writeDataPDU
F: cannot send SOP instance: DIMSE Failed to send message
F: 0006:031d TCP I/O Error (Eine vorhandene Verbindung wurde vom Remotehost geschlossen.) occurred in routine: writeDataPDU
E: Association Abort Failed: 0006:031d TCP I/O Error (Eine vorhandene Verbindung wurde vom Remotehost geschlossen.) occurred in routine: sendAbortTCP
The Container is newly built and running on a Ubuntu 22.04 host system.
In the log above, I’ve sent a dicom file to port 4343, which produced the previously mentioned error.
Afterwards sending to the “main” port 4242 works normally though.
I also have the same issue when using the jodogne/orthanc-python:latest docker image.