当我尝试在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
在这种情况下,有人可以帮助我吗?
答案 0 :(得分:3)
您将MyBinFile.bin复制到/tmp/MyBinFile.bin。那些不是同一个文件。如果需要运行它,请使用具有可执行属性的文件的绝对路径。所以你的最后一行应该是:
RUN chmod +x /tmp/MyBinFile.bin && /tmp/MyBinFile.bin
'' (点)表示您当前的当前工作目录。如果你不确定你的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。
答案 1 :(得分:2)
在Docker中运行NextJs时,我遇到了类似的问题。这是我解决问题的方法:
注意::在访问dockerized应用内的文件时,例如,该解决方案还将解决EACCES error...Permission penied
路由页面。
我在更改所有权的命令之前立即添加了root
个用户,后来又切换回去与其余non-root
用户(即来自基本高山映像的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