OSS DICOM Server Orthancの検証メモ
OSS DICOM Server 「Orthanc」をDockerで動かしてみた記録です。あまり日本語の情報がないのでまとめてみました。
公式ドキュメント:https://book.orthanc-server.com/
動作検証環境
OS: Ubuntu20.04
Docker: 23.0.1
Docker Compose: v2.16.0(plugin)
まずは単体で動かしてみる
公式のdockerイメージjodogne/orthancを動かす
ドキュメントの通りコマンドを実行。$ docker run -p 4242:4242 -p 8042:8042 --rm jodogne/orthanc:1.11.0
http://orthanc_host:8042/
にアクセスし、ユーザ名/パスワードに「orthanc/orthanc」と入力すると以下のような画面が表示される。
この状態ではdockerコンテナを停止するとデータも無くなるため、外部ボリュームをマウントするなどしてデータ永続化の設定をする必要がある。
※http://orthanc_host
部分は自身の環境等に合わせ読み替えてください
Docker Composeで起動
設定のカスタマイズ
コンテナイメージ内の設定ファイルを取得
$ mkdir ~/Orthanc
$ cd ~/Orthanc
$ docker run --rm --entrypoint=cat jodogne/orthanc-plugins:1.11.0 /etc/orthanc/orthanc.json > orthanc.json
テキストエディタでorthanc.jsonを編集する。変えたのは以下の部分。
//HTTPアクセス(Web画面)のポート番号
"HttpPort" : 18042,
//AEタイトル
"DicomAet" : "ORTHANCTEST",
//DICOMポート番号
"DicomPort" : 50444,
//ログインユーザ
"RegisteredUsers" : {
"test" : "test"
},
docker-compose.ymlの作成
公式ドキュメントに倣って、以下のように作成。公式はsecretsを使っているが、volumesでマウントしても動作する。後々、PostgreSQLへの接続なども考慮しnetworkを作成している
version: '3'
networks:
develop_nw:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.50.0/24
services:
orthanc:
image: jodogne/orthanc-plugins:1.11.0
container_name: orthanc-sv
ports:
- 50444:50444
- 18042:18042
volumes:
- ./orthanc.json:/etc/orthanc/orthanc.json:ro
environment:
- ORTHANC_NAME=Orthanc
networks:
develop_nw:
ipv4_address: 192.168.50.11
docker-compose.ymlを保存したら、以下のコマンドで起動する。
$ docker compose up -d
アクセスURLが http://orthanc_host:18042/
ログインユーザ名/パスワードが「test/test」になっていることを確認。
データベースをPostgreSQLに変更
PostgreSQLのdockerコンテナを実行
公式のようにコマンドでやっても良いが、後々統合してしまうのでdocker-compose.ymlにPostgreSQL用の設定を加える。DB初期化などを行うので一旦orthancの部分はコメントアウトしておく。
version: '3'
networks:
develop_nw:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.50.0/24
services:
# PostgreSQLだけ動かすので一旦コメントアウトする
# orthanc:
# image: jodogne/orthanc-plugins:1.11.0
# container_name: orthanc-sv
# (省略)
postgresql:
image: postgres:13.9
container_name: orthanc-db
ports:
- 15432:5432
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
volumes:
- ./postgres_data:/var/lib/postgresql/data
networks:
develop_nw:
ipv4_address: 192.168.50.31
Docker Composeで起動する。
$ docker compose up -d
データベースを初期化する
$ docker run -it --link orthanc-db:postgres --net=orthanc_develop_nw --rm postgres:13.9 sh -c 'echo "CREATE DATABASE orthanc;" | psql -h 192.168.50.31 -U postgres'
以下の出力があるので、POSTGRES_PASSWORDで設定したパスワードを入力する
Password for user postgres:
Docker ComposeでOrthancとPostgreSQLを起動
docker-compose.ymlのコメントアウトを外し、depends_onにpostgresqlを指定しDBの起動後にorthancが起動するように設定
version: '3'
networks:
develop_nw:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.50.0/24
services:
orthanc:
image: jodogne/orthanc-plugins:1.11.0
container_name: orthanc-sv
ports:
- 50444:50444
- 18042:18042
volumes:
- ./orthanc.json:/etc/orthanc/orthanc.json:ro
environment:
- ORTHANC_NAME=Orthanc
networks:
develop_nw:
ipv4_address: 192.168.50.11
depends_on:
- postgresql
postgresql:
image: postgres:13.9
container_name: orthanc-db
ports:
- 15432:5432
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
volumes:
- ./postgres_data:/var/lib/postgresql/data
networks:
develop_nw:
ipv4_address: 192.168.50.31
orthanc.jsonにPostgresSQL接続設定を追加する
"PostgreSQL":{
"EnableIndex":true,
"EnableStorage":true,
"Host":"192.168.50.31",
"Port":5432,
"Database":"orthanc",
"Username":"postgres",
"Password":"postgres"
}
Docker Composeで起動
$ docker compose up -d
http://orthanc_host:18042/
にアクセスできない。
$ docker ps -a
orthancコンテナの状態を確認すると Exited (139)
となり起動していなかった
Orthancがexited with code 139で起動しない件
orthancコンテナのログ出力をtraceに変えてみたところ、PostgresSQLプラグイン部分で落ちているようだった
orthanc-sv | W1223 06:34:08.166648 PluginsManager.cpp:258] Registering plugin 'postgresql-storage' (version 4.0)
orthanc-sv | T1223 06:34:08.166730 OrthancPlugins.cpp:5638] (plugins) Calling service 7 from plugin /usr/local/share/orthanc/plugins/libOrthancPostgreSQLStorage.so
orthanc-sv | T1223 06:34:08.166756 OrthancPlugins.cpp:5638] (plugins) Calling service 13 from plugin /usr/local/share/orthanc/plugins/libOrthancPostgreSQLStorage.so
orthanc-sv | T1223 06:34:08.167479 OrthancPlugins.cpp:5638] (plugins) Calling service 13 from plugin /usr/local/share/orthanc/plugins/libOrthancPostgreSQLStorage.so
orthanc-sv exited with code 139
Docker Composeを使用せずコマンドでpostgresql→orthancの順で起動してやるとOKだった。
Docker Compose起動順制御
postgresqlが完全に起動しきらないうちに、orthancが起動してエラーになっているのではないかと思い、Google検索してみると次のDocker公式ドキュメントに行きついた。wait_for_it.sh
を仕掛けてみるもうまく行かなかったため、さらに調べるとDocker Composeにservice_healthy
なるものがあることが分かった。
早速、docker-compose.ymlを変更してみた。
orthancコンテナのdepends_onを変更
depends_on:
postgresql:
condition: service_healthy
postgresqlコンテナにhealth_checkを追加
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 1s
retries: 5
変更後に起動してみると、Orthancもきちんと起動した。
ただ、postgresqlコンテナが、以下のようなエラーログを出力しており非常に気持ち悪い。
orthanc-db | 2022-12-23 07:10:42.670 UTC [69] FATAL: role "root" does not exist
pg_isreadyにユーザ指定できるようなので、
test: ["CMD-SHELL", "pg_isready -U postgres"]
と変更。これでエラーが出なくなった。
docker-compose.yml完成形は下記の通り
version: '3'
networks:
develop_nw:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.50.0/24
services:
orthanc:
image: jodogne/orthanc-plugins:1.11.0
container_name: orthanc-sv
ports:
- 50444:50444
- 18042:18042
volumes:
- ./orthanc.json:/etc/orthanc/orthanc.json:ro
- ./orthanc_data:/var/lib/orthanc/db
environment:
- ORTHANC_NAME=Orthanc
networks:
develop_nw:
ipv4_address: 192.168.50.11
depends_on:
postgresql:
condition: service_healthy
postgresql:
image: postgres:13.9
container_name: orthanc-db
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 1s
retries: 5
ports:
- 15432:5432
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
volumes:
- ./postgres_data:/var/lib/postgresql/data
networks:
develop_nw:
ipv4_address: 192.168.50.31
参考情報
Discussion