繁体   English   中英

Docker:启动容器进程导致“exec:\”-n\“:$PATH中找不到可执行文件”:未知

[英]Docker : starting container process caused “exec: \”-n\“: executable file not found in $PATH”: unknown

在我的 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

我真的找不到任何答案来解决我的问题......

预先感谢您的任何帮助。

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命令在新环境(甚至在新容器中)中的新 shell 中开始,例如 RUN cd...在它自己的行中不做任何事情。 您需要使用WORKDIRENV等 Dockerfile 指令来更改环境。 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM