如何在同一个容器中运行COPY和RUN命令?

时间:2014-12-16 11:07:49

标签: java linux docker dockerfile

我正在尝试将rpm文件中的java安装到docker centos image。

> Step 0 : FROM centos:latest
 ---> **34943839435d**
Step 1 : COPY . jdk-6u45-linux-x64-rpm.bin
 ---> **2055e5db6ae9**
Removing intermediate container 7ae13aaa4424
Step 2 : RUN chmod +x jdk-6u45-linux-x64-rpm.bin &&     sh jdk-6u45-linux-x64-rpm.bin
 ---> Running in **c4d6b63576bc**
jdk-6u45-linux-x64-rpm.bin: jdk-6u45-linux-x64-rpm.bin: is a directory
2014/12/16 06:03:34 The command [/bin/sh -c chmod +x jdk-6u45-linux-x64-rpm.bin &&  sh jdk-6u45-linux-x64-rpm.bin] returned a non-zero code: 126

它给出的错误似乎是因为容器不同。如何在同一个容器上运行命令?

Docker文件如下

FROM    centos:latest

# Install Java.
COPY . jdk-6u45-linux-x64-rpm.bin

RUN chmod +x jdk-6u45-linux-x64-rpm.bin && \
        sh jdk-6u45-linux-x64-rpm.bin

2 个答案:

答案 0 :(得分:2)

COPY的语法如下:

COPY <src>... <dest>

所以COPY . jdk-6u45-linux-x64-rpm.bin表示将当前目录复制为jdk-6u45-linux-x64-rpm.bin。因此错误。

这可以给你你想要的东西:

COPY jdk-6u45-linux-x64-rpm.bin jdk-6u45-linux-x64-rpm.bin

答案 1 :(得分:0)

你的RUN命令实际上是在同一个容器中运行,命令本身就失败了,可能是因为你没有正确设置路径。

这是一个非常相似的docker文件的例子,它可以正确构建和运行(顺便说一句,不需要/ bin / sh -c,因为这正是run命令正在做的事情)

FROM centos:latest

COPY test.bin /root/
RUN /bin/sh -c "chmod +x /root/test.bin"

有关run命令的详细信息,请参阅https://docs.docker.com/reference/builder/#run