【问题标题】:Docker How to save and restore WORKDIR in Dockerfile?Docker 如何在 Dockerfile 中保存和恢复 WORKDIR?
【发布时间】:2019-04-17 11:51:01
【问题描述】:

我有一个来自图像的 Dockerfile。 我想修改它并添加一些文件操作,这些操作将与不同的 WORKDIR 相关,而不是 FROM 图像给出的操作。因此,我想在修改 WORKDIR 之前将 WORKDIR 保存到一个变量中,并在我的命令结束后从该变量中恢复 WORKDIR。该怎么做?

想要的结果:

Dockerfile 伪代码:

FROM centos:7
some original commands
some original commands
...
var=WORKDIR #save WORKDIR <== how to do that?

WORDIR /my/path/
my commands
my commands

...
WORKDIR = var # restore path that was before <== how to do that?

【问题讨论】:

标签: docker save dockerfile restore working-directory


【解决方案1】:

添加到 WSMthias9 的答案:

除非 WORKDIR 被您使用的基本映像更改,否则默认值始终为 / 在您的情况下,您可以在完成后将其设置为 /,因为它是 @ 的默认值987654324@图片

但是,如果您使用WORKDIR 代替cd,只需在RUN 中使用cd

而不是例如:

FROM centos:7

WORKDIR /folder
RUN mycommand

做:

FROM centos:7

RUN cd /folder && mycommand

【讨论】:

    【解决方案2】:

    您可以创建一个环境变量。

    ENV WORKDIR=/my/path/
    WORDIR $WORKDIR
    

    【讨论】:

      【解决方案3】:

      如果您试图从基础映像中保留 WORKDIR,那么这是不可能的

      WORKDIR 只有在同一个 dockerfile 中设置才有价值。

      如果您尝试为不同的命令使用不同的工作目录:

      Dockerfile 伪代码:

      FROM centos:7
      some original commands
      some original commands
      ...
      ARG PATH1=/path1
      ARG PATH2=/path1
      
      my commands
      my commands
      
      WORKDIR PATH1
      my commands
      my commands
      
      WORKDIR PATH2
      my commands
      my commands
      
      WORKDIR PATH1
      my commands
      my commands
      
      ...
      WORKDIR PATH1 # restore path that was before <== how to do that?
      

      【讨论】:

        猜你喜欢
        • 2020-03-09
        • 2019-05-25
        • 1970-01-01
        • 2016-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-02
        相关资源
        最近更新 更多