集成两个Docker应用-Docker compose和Docker run

我正在尝试集成两个应用程序。目前,我有一个包含两个服务的docker-compose文件和另一个docker-

run命令以启动另一个服务。根据下面的配置,我希望将互连在端口3030上运行的OHIF

Viewer和运行在8042上的Orthanc。我的意思是,如果我在Orthanc中上传图片,则应该可以在OHIF查看器中看到它们。目前,我可以在各自的端口中同时查看Orthanc和OHIF查看器,但看不到它们之间的任何交互。例如:在OHIF

Viewer中看不到我的图像(在Orthanc中上传)。

我认为dockersupport-app.json文件负责此交互,因为它具有有关端口8042的信息,并在docker-

compose.yml文件的“卷”部分中使用。

这是我的docker-compose文件

version: '3.6'

services:

mongo:

image: "mongo:latest"

container_name: ohif-mongo

ports:

- "27017:27017"

viewer:

image: ohif/viewer:latest

container_name: ohif-viewer

ports:

- "3030:80"

environment:

- MONGO_URL=mongodb://mongo:27017/ohif

extra_hosts:

- "pacsIP:172.xx.xxx.xxx"

volumes:

- ./dockersupport-app.json:/app/app.json

dockersupport-app.json如下图所示

  {

"apps" : [{

"name" : "ohif-viewer",

"script" : "main.js",

"watch" : true,

"merge_logs" : true,

"cwd" : "/app/bundle/",

"env": {

"METEOR_SETTINGS": {

"servers": {

"dicomWeb": [

{

"name": "Orthanc",

"wadoUriRoot": "http://pacsIP:8042/wado", # these ports

"qidoRoot": "http://pacsIP:8042/dicom-web", #these ports

"wadoRoot": "http://pacsIP:8042/dicom-web", #these ports

"qidoSupportsIncludeField": false,

"imageRendering": "wadouri",

"thumbnailRendering": "wadouri",

"requestOptions": {

"auth": "orthanc:orthanc",

"logRequests": true,

"logResponses": false,

"logTiming": true

}

}

]

},

"defaultServiceType": "dicomWeb",

"public": {

"ui": {

"studyListDateFilterNumDays": 1

}

},

"proxy": {

"enabled": true

}

}

}

}]

}

我的docker run命令在端口8042中启动Orthanc,如下所示

docker run -p 4242:4242 -p 8042:8042 --rm --name orthanc -v 

$(pwd)/orthanc/config/orthanc.json:/etc/orthanc/orthanc.json -v

$(pwd)/orthanc/config/orthanc-db:/var/lib/orthanc/orthanc-db

jodogne/orthanc-

plugins /etc/orthanc --verbose

关于如何将这两者整合在一起,您能帮我吗?以上所有文件/代码是我所拥有的信息。

回答:

配置不起作用主要是因为应用程序未读取dockersupport-app.json。以下是基于项目在线文档的工作示例。

另一个问题是对dicomWeb服务器的访问。您正在使用pacsIP:8042,如果请求是从容器内部启动的,则可以。但这是一个javascript应用程序,该请求由主机上的浏览器启动。因此,应使用“

localhost”。

这是一个有效的配置:

version: '3.6'

services:

mongo:

image: "mongo:latest"

container_name: ohif-mongo

ports:

- "27017:27017"

viewer:

image: ohif/viewer:latest

container_name: ohif-viewer

ports:

- "3030:80"

environment:

- MONGO_URL=mongodb://mongo:27017/ohif

volumes:

- ./config/default.js:/usr/share/nginx/html/config/default.js

depends_on:

- mongo

- proxy

orthanc:

image: jodogne/orthanc-plugins

ports:

- "4242:4242"

- "8042:8042"

volumes:

# Config

- ./config/orthanc.json:/etc/orthanc/orthanc.json:ro

# Persist data

- ./volumes/orthanc-db/:/var/lib/orthanc/db/

command: "/etc/orthanc --verbose"

proxy:

image: nginx:1.15-alpine

ports:

- 8899:80

volumes:

- ./config/nginx.conf:/etc/nginx/nginx.conf:ro

depends_on:

- orthanc

restart: unless-stopped

在 文件夹中放置文件:

window.config = {

// default: '/'

routerBasename: '/',

// default: ''

relativeWebWorkerScriptsPath: '',

servers: {

dicomWeb: [

{

name: 'DCM4CHEE',

wadoUriRoot: 'http://localhost:8899/wado',

qidoRoot: 'http://localhost:8899/dicom-web',

wadoRoot: 'http://localhost:8899/dicom-web',

qidoSupportsIncludeField: true,

imageRendering: 'wadouri',

thumbnailRendering: 'wadouri',

requestOptions: {

requestFromBrowser: true,

auth: "orthanc:orthanc",

"logRequests": true,

"logResponses": true,

"logTiming": true

},

},

],

},

// Extensions should be able to suggest default values for these?

// Or we can require that these be explicitly set

hotkeys: [

// ~ Global

{

commandName: 'incrementActiveViewport',

label: 'Next Image Viewport',

keys: ['right'],

},

{

commandName: 'decrementActiveViewport',

label: 'Previous Image Viewport',

keys: ['left'],

},

// Supported Keys: https://craig.is/killing/mice

// ~ Cornerstone Extension

{ commandName: 'rotateViewportCW', label: 'Rotate Right', keys: ['r'] },

{ commandName: 'rotateViewportCCW', label: 'Rotate Left', keys: ['l'] },

{ commandName: 'invertViewport', label: 'Invert', keys: ['i'] },

{

commandName: 'flipViewportVertical',

label: 'Flip Horizontally',

keys: ['h'],

},

{

commandName: 'flipViewportHorizontal',

label: 'Flip Vertically',

keys: ['v'],

},

{ commandName: 'scaleUpViewport', label: 'Zoom In', keys: ['+'] },

{ commandName: 'scaleDownViewport', label: 'Zoom Out', keys: ['-'] },

{ commandName: 'fitViewportToWindow', label: 'Zoom to Fit', keys: ['='] },

{ commandName: 'resetViewport', label: 'Reset', keys: ['space'] },

// clearAnnotations

// nextImage

// previousImage

// firstImage

// lastImage

{

commandName: 'nextViewportDisplaySet',

label: 'Previous Series',

keys: ['pagedown'],

},

{

commandName: 'previousViewportDisplaySet',

label: 'Next Series',

keys: ['pageup'],

},

// ~ Cornerstone Tools

{ commandName: 'setZoomTool', label: 'Zoom', keys: ['z'] },

],

};

worker_processes 1;

events { worker_connections 1024; }

http {

upstream orthanc-server {

server orthanc:8042;

}

server {

listen [::]:80 default_server;

listen 80;

# CORS Magic

add_header 'Access-Control-Allow-Origin' '*';

add_header 'Access-Control-Allow_Credentials' 'true';

add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';

add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';

location / {

if ($request_method = 'OPTIONS') {

add_header 'Access-Control-Allow-Origin' '*';

add_header 'Access-Control-Allow_Credentials' 'true';

add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';

add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';

add_header 'Access-Control-Max-Age' 1728000;

add_header 'Content-Type' 'text/plain charset=UTF-8';

add_header 'Content-Length' 0;

return 204;

}

proxy_pass http://orthanc:8042;

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Host $server_name;

# CORS Magic

add_header 'Access-Control-Allow-Origin' '*';

add_header 'Access-Control-Allow_Credentials' 'true';

add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';

add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';

}

}

}

{

"Name": "Orthanc inside Docker",

"StorageDirectory": "/var/lib/orthanc/db",

"IndexDirectory": "/var/lib/orthanc/db",

"StorageCompression": false,

"MaximumStorageSize": 0,

"MaximumPatientCount": 0,

"LuaScripts": [],

"Plugins": ["/usr/share/orthanc/plugins", "/usr/local/share/orthanc/plugins"],

"ConcurrentJobs": 2,

"HttpServerEnabled": true,

"HttpPort": 8042,

"HttpDescribeErrors": true,

"HttpCompressionEnabled": true,

"DicomServerEnabled": true,

"DicomAet": "ORTHANC",

"DicomCheckCalledAet": false,

"DicomPort": 4242,

"DefaultEncoding": "Latin1",

"DeflatedTransferSyntaxAccepted": true,

"JpegTransferSyntaxAccepted": true,

"Jpeg2000TransferSyntaxAccepted": true,

"JpegLosslessTransferSyntaxAccepted": true,

"JpipTransferSyntaxAccepted": true,

"Mpeg2TransferSyntaxAccepted": true,

"RleTransferSyntaxAccepted": true,

"UnknownSopClassAccepted": false,

"DicomScpTimeout": 30,

"RemoteAccessAllowed": true,

"SslEnabled": false,

"SslCertificate": "certificate.pem",

"AuthenticationEnabled": false,

"RegisteredUsers": {

"test": "test"

},

"DicomModalities": {},

"DicomModalitiesInDatabase": false,

"DicomAlwaysAllowEcho": true,

"DicomAlwaysAllowStore": true,

"DicomCheckModalityHost": false,

"DicomScuTimeout": 10,

"OrthancPeers": {},

"OrthancPeersInDatabase": false,

"HttpProxy": "",

"HttpVerbose": true,

"HttpTimeout": 10,

"HttpsVerifyPeers": true,

"HttpsCACertificates": "",

"UserMetadata": {},

"UserContentType": {},

"StableAge": 60,

"StrictAetComparison": false,

"StoreMD5ForAttachments": true,

"LimitFindResults": 0,

"LimitFindInstances": 0,

"LimitJobs": 10,

"LogExportedResources": false,

"KeepAlive": true,

"TcpNoDelay": true,

"HttpThreadsCount": 50,

"StoreDicom": true,

"DicomAssociationCloseDelay": 5,

"QueryRetrieveSize": 10,

"CaseSensitivePN": false,

"LoadPrivateDictionary": true,

"Dictionary": {},

"SynchronousCMove": true,

"JobsHistorySize": 10,

"SaveJobs": true,

"OverwriteInstances": false,

"MediaArchiveSize": 1,

"StorageAccessOnFind": "Always",

"MetricsEnabled": true,

"DicomWeb": {

"Enable": true,

"Root": "/dicom-web/",

"EnableWado": true,

"WadoRoot": "/wado",

"Host": "127.0.0.1",

"Ssl": false,

"StowMaxInstances": 10,

"StowMaxSize": 10,

"QidoCaseSensitive": false

}

}

使用此配置运行:

docker-compose up -d viewer

上传图片:http:// localhost:8899

在查看器中查看图像:http:// localhost:3030

以上是 集成两个Docker应用-Docker compose和Docker run 的全部内容, 来源链接: utcz.com/qa/412841.html

回到顶部