Docker: запуск процесса контейнера вызвал "exe c: \" - n \ ": исполняемый файл не найден в $ PATH": неизвестно - PullRequest
0 голосов
/ 23 апреля 2020

При запуске команды на моем docker образе (запустить) я получаю следующую ошибку:

C:\Program Files\Docker\Docker\resources\bin\docker.exe: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-n\": executable file not found in $PATH": unknown.

Изображение - это изображение для Jmeter, которое я создал сам:

FROM        hauptmedia/java:oracle-java8

MAINTAINER  maisie

ENV         JMETER_VERSION  5.2.1
ENV         JMETER_HOME /opt/jmeter
ENV         JMETER_DOWNLOAD_URL https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-${JMETER_VERSION}.tgz

RUN         apt-get clean
RUN         apt-get update
RUN         apt-get -y install ca-certificates              
RUN         mkdir -p ${JMETER_HOME}                         
RUN         cd ${JMETER_HOME}                           
RUN         wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.2.1.tgz
RUN         tar -xvzf apache-jmeter-5.2.1.tgz   
RUN         rm apache-jmeter-5.2.1.tgz          

Я запускаю команду:

#!/bin/bash

export volume_path=$(pwd)

export jmeter_path="/opt/apache-jmeter-5.2.1/bin"

docker run --volume ${volume_path}:${jmeter_path} my/jmeter -n -t ${jmeter_path}/TEST.jmx -l ${jmeter_path}/res.jtl

Я действительно не могу найти ответ на мою проблему ...

Заранее благодарю за любую помощь.

1 Ответ

1 голос
/ 23 апреля 2020

Общая форма команды docker run:

docker run [docker options] <image name> [command]

Итак, вы запускаете образ с именем amos/jmeter, а команда, которую вы запускаете, - -n -t .... Вы получаете ошибку, потому что вы дали только список параметров, а не фактическую команду.

Первая часть этого заключается в том, чтобы включить фактическую команду в вашу строку docker run:

docker run --rm amos/jmeter \
  jmeter -n ...

Также будет проблема с установкой программного обеспечения в Dockerfile. (Вам не нужен docker run --volume для предоставления программного обеспечения, которое уже находится в образе.) Каждая команда RUN запускается в новой оболочке в новой среде (даже в новом контейнере), так что например, RUN cd ... в своей собственной строке ничего не делает. Вам нужно использовать директивы Dockerfile, такие как WORKDIR и ENV, чтобы изменить среду. Команда jmeter не находится в стандартном двоичном каталоге, поэтому у вас также будут небольшие проблемы с ее запуском. Я мог бы изменить:

# ...

# Run all APT commands in a single command
# (Layer caching can break an install if the list of packages changes)
RUN apt-get clean \
 && apt-get update \
 && apt-get -y install ca-certificates

# Download and unpack the JMeter tar file
# This is all in a single RUN command, so
# (1) the `cd` at the effect has (temporary) effect, and
# (2) the tar file isn't committed to an image before you `rm` it
RUN cd /opt \
 && wget ${JMETER_DOWNLOAD_URL} \
 && tar xzf apache-jmeter-${JMETER_VERSION}.tgz \
 && rm apache-jmeter-${JMETER_VERSION}.tgz

# Create a symlink to the jmeter process in a normal bin directory
RUN ln -s /opt/apache-jmeter-${JMETER_VERSION}/bin/jmeter /usr/local/bin

# Indicate the default command to run
CMD jmeter

Наконец, возникнут вопросы о том, где хранить файлы данных. Лучше хранить данные вне каталога приложения; в контексте Docker достаточно часто использовать короткие (если не стандартные) пути к каталогам, такие как /data. Помните, что любой путь к файлу в команде docker run относится к пути в контейнере, но вам нужен параметр docker run -v bind-mount (ваш исходный --volume эквивалентен), чтобы сделать его видимым на хосте. Это даст вам окончательную команду, такую ​​как:

docker run -v "$PWD:/data" atos/jmeter \
    jmeter -n -t /data/TEST.jmx -l /data/res.jtl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...