【问题标题】:The command '/bin/sh returned a non-zero code: 1命令 '/bin/sh 返回一个非零代码:1
【发布时间】:2017-04-03 08:28:23
【问题描述】:

当我尝试在 ubuntu Docker 容器中手动安装 bin 文件时,它运行良好,

./MyBinfile.bin

但是当我从我的 Dockerfile 中尝试它时,我总是得到错误: 命令 '/bin/sh -c chmod +x /tmp/snapcenter_linux_host_plugin.bin && ./tmp/MyBinFile.bin' 返回一个非零代码:1

我的 Dockerfile 看起来像:

    FROM debian:jessie

    RUN apt-get update && apt-get install -y openjdk-7-jdk
    ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
    RUN echo $JAVA_HOME

    COPY MyBinFile.bin /tmp/MyBinFile.bin
    RUN chmod +x /tmp/MyBinFile.bin && ./tmp/MyBinFile.bin

在这种情况下有人可以帮助我吗?

【问题讨论】:

  • 您的 cwd 可能不是 /tmp,所以请尝试将其作为绝对路径执行。
  • @TatsuyukiIshi:抱歉打错了,我在问题中修复了我的 docker 文件。
  • MyBinFile.bin 中有什么?您是否在 Windows 机器上编辑过此文件?

标签: docker


【解决方案1】:

您将 MyBinFile.bin 复制到 /tmp/MyBinFile.bin。这些不是同一个文件。如果您需要运行它,请使用具有可执行属性的文件的绝对路径。所以你的最后一行应该是:

RUN chmod +x /tmp/MyBinFile.bin && /tmp/MyBinFile.bin

'.' (dot) 代表您当前的当前工作目录。如果您不确定 cwd 是什么,建议始终使用绝对路径。

编辑

运行 Dockerfile 会产生以下输出:

Sending build context to Docker daemon 3.584 kB
Step 1/6 : FROM debian:jessie
 ---> 8cedef9d7368
Step 2/6 : RUN apt-get update && apt-get install -y openjdk-7-jdk
 ---> Using cache
 ---> 1a0005923f41
Step 3/6 : ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
 ---> Using cache
 ---> 5651d50b519e
Step 4/6 : RUN echo $JAVA_HOME
 ---> Using cache
 ---> 96655235a2cf
Step 5/6 : COPY MyBinFile.bin /tmp/MyBinFile.bin
 ---> 60c79aaf5aca
Removing intermediate container cd729c315e9b
Step 6/6 : RUN chmod +x /tmp/MyBinFile.bin && /tmp/MyBinFile.bin
 ---> Running in 5db126cbd24c
/bin/sh: 1: /tmp/MyBinFile.bin: Text file busy
The command '/bin/sh -c chmod +x /tmp/MyBinFile.bin && 
/tmp/MyBinFile.bin' returned a non-zero code: 2

但是如果我把你的最后一步分成两个不同的步骤:

FROM debian:jessie

RUN apt-get update && apt-get install -y openjdk-7-jdk
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
RUN echo $JAVA_HOME

COPY MyBinFile.bin /tmp/MyBinFile.bin
RUN chmod +x /tmp/MyBinFile.bin
RUN /tmp/MyBinFile.bin

然后它执行OK。

【讨论】:

  • 我仍然得到相同的命令 '/bin/sh -c chmod +x /tmp/MyBinFile.bin && /tmp/MyBinFile.bin' 返回了一个非零代码: 1 在尝试您的解决方案。
【解决方案2】:

在 Docker 中运行 NextJs 时,我遇到了类似的问题。这是我解决问题的方法::

注意 :: 此解决方案还将在访问 dockerized 应用程序内的文件时解决EACCES error...Permission penied,例如路由页面。

我在命令之前添加了 root 用户以更改所有权,然后切换回运行其余命令以及带有 non-root 用户的容器,即来自基本 alpine 映像的 node 用户。

# The "./" is the working directory e.g. /usr/app
USER root
RUN chmod a+w ./ -R

# Later switch back to run rest of commands and container as node non-root user 
USER node

【讨论】:

    猜你喜欢
    • 2019-02-02
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 2017-10-05
    • 1970-01-01
    • 2021-03-19
    相关资源
    最近更新 更多