【问题标题】:Docker : starting container process caused "exec: \"-n\": executable file not found in $PATH": unknownDocker:启动容器进程导致“exec:\”-n\”:$PATH 中找不到可执行文件”:未知
【发布时间】:2020-04-23 09:55:27
【问题描述】:

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

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

提前感谢您的帮助。

【问题讨论】:

  • 你想在容器中运行什么命令?
  • @BMitch 我想运行 Jmeter 命令以在非 GUI 模式下运行 Jmeter,使用我主机上的文件 (TEST.jmx)...

标签: docker jmeter dockerfile


【解决方案1】:

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 绑定挂载选项(您原来的 --volume 是等效的)才能使其在主机上可见。这会给你一个最终的命令,比如:

docker run -v "$PWD:/data" atos/jmeter \
    jmeter -n -t /data/TEST.jmx -l /data/res.jtl

【讨论】:

  • 谢谢!!但我有以下错误: 发生错误:文件 /C:/Program Files/Git/data/TEST.jmx 不存在或无法打开......我已经创建了文件,但我真的没有'不明白为什么会出现这个问题...
  • 这是一个 git bash 错误,将路径更改为有一个额外的前导斜杠,例如export jmeter_path="//opt/apache-jmeter-5.2.1/bin" 或在本例中为 //data/TEST.jmx
  • 谢谢,我已经修改为docker run -v "$(pwd)":/data my/jmeter \ jmeter -n -t //data/TEST.jmx -l //data/res.jtl,但现在我有错误:An error occurred: The file /data/TEST.jmx doesn't exist or can't be opened ...有什么想法吗?真的我对这个错误一无所知,在谷歌上找不到任何帮助......
  • 现在您是在 Windows 中运行 Linux 还是相反? $(pwd) 在 Windows 中不起作用。
  • 提供$(pwd)的.jmx instade的路径。你的命令应该像 docker run -v "":/data my/jmeter \ jmeter -n -t //data/TEST.jmx -l //data/res.jtl
猜你喜欢
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 2022-01-07
  • 2018-09-21
  • 1970-01-01
  • 2022-11-10
  • 2020-01-15
  • 1970-01-01
相关资源
最近更新 更多