Почему Docker не позволяет мне выполнять двоичный файл без интерактивного сеанса? - PullRequest
0 голосов
/ 21 июня 2019

Я знаком с докером, но дошел до блокпоста.Я пытаюсь вызвать исполняемый файл из терминала без запуска интерактивного сеанса.В настоящее время я могу сделать это, выполнив следующие две команды:

docker run --rm -it -v $PWD/face/:/home/openface-build algebr/openface:latest 
build/bin/FeatureExtraction -f ./face/officespace.mp4

Я пытаюсь написать команду, которая выглядит следующим образом:

docker run --rm -v $PWD/face/:/home/openface-build algebr/openface:latest ./build/bin/FeatureExtraction -f ./face/officespace.mp4

Однако при исполнении яполучаю сообщение об ошибке, говорящее, что я не могу выполнить двоичный файл.Я также получаю это, если я пытаюсь запустить

docker run --rm -v $PWD/face/:/home/openface-build algebr/openface:latest bash

Это содержимое моей команды проверки образа докера

 "ContainerConfig": {
            "Hostname": "1bc488685a5e",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "ENTRYPOINT [\"/bin/bash\"]"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:c7625f34563c9af6cc837f8ccc202a61070a5f702888a06f15e4184b497da049",
            "Volumes": null,
            "WorkingDir": "/home/openface-build",
            "Entrypoint": [
                "/bin/bash"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "Edgar Aroutiounian <edgar.factorial@gmail.com>"
            }
        },
        "DockerVersion": "18.03.1-ce",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": null,
            "ArgsEscaped": true,
            "Image": "sha256:c7625f34563c9af6cc837f8ccc202a61070a5f702888a06f15e4184b497da049",
            "Volumes": null,
            "WorkingDir": "/home/openface-build",
            "Entrypoint": [
                "/bin/bash"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "Edgar Aroutiounian <edgar.factorial@gmail.com>"
            }
        },

Also it should be noted that in order to replicate this problem, I had to copy the original contents of container $ /home/openface-build/ to localhost$ ~/face so that they merge as a union 

1 Ответ

0 голосов
/ 21 июня 2019

Если вы посмотрите на Dockerfile для этого базового образа , он заканчивается строкой

ENTRYPOINT ["/bin/bash"]

Это означает, что любая команда, которую вы передадите в качестве аргумента docker run, будет фактически заданав качестве аргументов bash - для вашей команды docker run Docker фактически выполняет

/bin/bash build/bin/FeatureExtraction -f ./face/officespace.mp4

Этот файл, предположительно, не является сценарием оболочки, что приводит к полученному вами сообщению об ошибке.

Поведение по умолчанию для неизмененного образа ubuntu фактически заключается в запуске оболочки при запуске, поэтому автор, работающий в верхнем течении, вероятно, должен просто удалить эту строку из своего Dockerfile;это не имеет никакого практического эффекта и вызывает проблемы для вас.

Неловкий способ обойти это - предоставить двоичный файл, который вы хотите использовать вместо точки входа.

docker run ... \
  --entrypoint build/bin/FeatureExtraction \
  algebr/openface:latest \
  -f ./face/officespace.mp4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...