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

我正在尝试从rpm文件安装java到docker centos映像。

> 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 

COPY语法如下:

 COPY <src>... <dest> 

所以COPY . jdk-6u45-linux-x64-rpm.bin 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 

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

下面是一个非常相似的docker文件的例子,这个文件的构build和运行是正确的(顺便说一下,不需要/ bin / sh -c,因为这正是运行命令所做的)

 FROM centos:latest COPY test.bin /root/ RUN /bin/sh -c "chmod +x /root/test.bin" 

有关运行命令的更多信息,请参阅https://docs.docker.com/reference/builder/#run