【问题标题】:Docker : RUN cd ... does not work as expected [duplicate]Docker:RUN cd ...无法按预期工作[重复]
【发布时间】:2013-07-27 08:25:11
【问题描述】:

以下 Dockerfile :

来自 ubuntu:12.10 运行 mkdir tmp123 运行 cd tmp123 运行密码

有输出:

上传上下文 10240 字节 第 1 步:来自 ubuntu:12.10 ---> b750fe79269d 第 2 步:运行 mkdir tmp123 ---> 在 d2afac8a11b0 中运行 ---> 51e2bbbb5513 第 3 步:运行 cd tmp123 ---> 在 4762147b207c 中运行 ---> 644801121b92 第 4 步:运行密码 ---> 在 3ed1c0f1049d 中运行 / ---> eee62a068585

构建时(docker build 命令)

看来RUN cd tmp123没有效果

为什么?

【问题讨论】:

    标签: docker


    【解决方案1】:

    实际上是预期的。

    dockerfile 只不过是 docker run + docker commit 的包装器。

    FROM ubuntu:12.10
    RUN mkdir tmp123
    RUN cd tmp123
    RUN pwd
    

    和做的一样:

    CID=$(docker run ubuntu:12.10 mkdir tmp123); ID=$(docker commit $CID)
    CID=$(docker run $ID cd tmp123); ID=$(docker commit $CID)
    CID=$(docker run $ID pwd); ID=$(docker commit $CID)
    

    每次运行时,都会生成一个新容器,因此 pwd 是“/”。

    如果您愿意,可以在 github 上打开一个问题,以便将 CHDIR 指令添加到 Dockerfile。

    【讨论】:

    • 命令 WORKDIR 用于此目的:docs.docker.com/reference/builder/#workdir
    • 如果docker build 可以在人们犯此错误时发出某种警告,那就太好了,我只是为此浪费了很多时间-_-
    • @creack 感谢您的清晰解释-我尝试运行 docker run 命令-在我的情况下它们没有返回 CID。因此我不得不使用 - docker run ubuntu:latest mkdir tmp123 && CID=$(docker ps --latest --quiet) && ID=$(docker commit $CID ubuntu:test1)
    【解决方案2】:

    也许你可以试试这个;我不确定,也无法尝试。如果它不起作用,我希望你不要投反对票。

    只是:

    RUN 'cd tmp123 ; pwd'
    

    代替

    RUN cd tmp123
    RUN pwd
    

    【讨论】:

    • 您需要在命令前后加上单引号或双引号,否则pwd 将在容器之外。 RUN 'cd tmp123;pwd'
    • 我会做RUN cd tmp123 && pwd :)
    猜你喜欢
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多