2015-10-19 2 views
1

Я пытаюсь запустить opencv через контейнер докеров. Я построил образ и во время работы контейнера непосредственноПередача файла команде docker

docker run -v /home/ganaraj/nndetect:/detect -ti opecv3 bash

и доступ к Баш

$>cd /detect/prediction $>prediction 1.jpg 0

Я получаю выход я ожидал (окончательный 0).

Но я бы действительно хотел запустить это как программу командной строки.

Я попытался как

docker run -v /home/ganaraj/nndetect:/detect -ti opecv3 /detect/prediction/prediction 1.png

docker run -v /home/ganaraj/nndetect:/detect -ti opecv3 /detect/prediction/prediction /detect/prediction/1.png

Но оба они Dont предоставить мне выход я ожидал от этого.

Что было бы правильным способом сделать это, чтобы я мог легко запустить это приложение, как инструмент командной строки (через докер) и получить выход обратно?

Я также попытался

docker run -v /home/ganaraj/nndetect:/detect -it -d opecv3 bin/bash

, а затем:

docker exec -it 3d618d63316c /detect/prediction/prediction /detect/prediction/1.png

, но все же я получаю тот же пустой ответ.

Client: 
Version:  1.8.3 
API version: 1.20 
Go version: go1.4.2 
Git commit: f4bf5c7 
Built:  Mon Oct 12 05:37:18 UTC 2015 
OS/Arch:  linux/amd64 

Server: 
Version:  1.8.3 
API version: 1.20 
Go version: go1.4.2 
Git commit: f4bf5c7 
Built:  Mon Oct 12 05:37:18 UTC 2015 
OS/Arch:  linux/amd64 
+0

почему './Обнаружение/предсказание/предсказание'? Почему бы не '/ detect/prediction/prediction' – VonC

+0

Извините. Я использовал его как '/ detect' позже .. Но так как я копирую из старой истории, я вставлял более старую версию здесь. Меняя ее. – ganaraj

ответ

1

докер Exec является mainly for debugging purpose.

Основное использование случай docker exec отлаживает под управлением контейнеров,
docker exec в основном для «исключительных» случаях

Если вы хотите, чтобы выполнить команду (здесь питон программа), то лучше всего для запуска контейнера только для этой команды.

alias dr='docker run -v /home/ganaraj/nndetect:/detect -w /detect/prediction -it --rm opecv3' 

Таким образом, не имея питон, установленный на вашем хосте, вы можете использовать determined_rosalind просто набрав:

dr ./prediction 1.png 

Это запустит transient контейнера для запуска питона программы, выхода и быть удален (--rm опция).

+0

Я думал об этом. Но просто не знал, как именно это сделать. Я новичок в докере, и я изначально начал довольно много экземпляров докеров, запустив несколько докеров. опция решает все это. Это самый интуитивный способ запустить это. – ganaraj

1

я, наконец, получил это работает - но я не уверен, что «почему» это делает его работу .. Если кто-то есть объяснение, почему добавьте его тоже ..

Но я думал, что это может быть хорошая идея отправить окончательное решение здесь ..

Я начал контейнер с помощью следующей команды:

docker run -v /home/ganaraj/nndetect:/detect -w /detect/prediction -it -d opecv3 bash

И теперь я могу сделать т он предсказание с этой командой, и она отлично работает

docker exec -it determined_rosalind ./prediction 1.png

Смежные вопросы