【问题标题】:How to run the COPY and RUN command in same container?如何在同一个容器中运行 COPY 和 RUN 命令?
【发布时间】:2014-12-16 11:07:48
【问题描述】:

我正在尝试将 java 从 rpm 文件安装到 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

【问题讨论】:

    标签: java linux docker dockerfile


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多