Общая форма команды 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