コマンド '/bin/sh は0以外のコードを返しました。1

ubuntuのDockerコンテナ内にbinファイルを手動でインストールしようとすると、完全に動作します。

./MyBinfile.bin

しかし、私のDockerfileからそれをしようとすると、常にエラーが発生します。 コマンド '/bin/sh -c chmod +x /tmp/snapcenter_linux_host_plugin.bin && ./tmp/MyBinFile.bin'return a non-zero code.このコマンドは、次のようなエラーになります。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

この場合、どなたか助けていただけませんか?

MyBinFile.binを/tmp/MyBinFile.binにコピーしています。これらは同じファイルではありません。もし、実行する必要があるのなら、実行可能な属性を持つファイルの絶対パスを使用してください。ですから、最後の行は次のようになります。

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

'.' (ドット)は現在のカレントワーキングディレクトリを表します。cwdが何であるか分からない場合は、常に絶対パスを使用することをお勧めします。

EDIT

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

しかし、あなたの最後のステップを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

であれば、問題なく実行されます。

解説 (1)