Docker如何在Dockerfile中保存和恢复WORKDIR?

Docker如何在Dockerfile中保存和恢复WORKDIR?,docker,save,dockerfile,restore,working-directory,Docker,Save,Dockerfile,Restore,Working Directory,我有一个来自图像的Dockerfile。 我想修改它并添加一些文件操作,这些操作将与不同的WORKDIR相关,而不是由FROM图像给出的WORKDIR。因此,我希望在修改WORKDIR之前将WORKDIR保存到一个变量,并在命令结束后从该变量恢复WORKDIR。怎么做 通缉结果: Dockerfile伪代码: FROM centos:7 some original commands some original commands ... var=WORKDIR #save WORKDIR <

我有一个来自图像的Dockerfile。 我想修改它并添加一些文件操作,这些操作将与不同的WORKDIR相关,而不是由FROM图像给出的WORKDIR。因此,我希望在修改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?
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?
来自centos:7
一些原始命令
一些原始命令
...

var=WORKDIR#save WORKDIR如果您试图从基本映像中保留WORKDIR,那么这是不可能的

WORKDIR只有在同一dockerfile中设置时才有值

如果您试图为不同的命令设置不同的工作目录:

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?
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?
来自centos:7
一些原始命令
一些原始命令
...
ARG路径1=/PATH1
ARG路径2=/path1
我的命令
我的命令
WORKDIR路径1
我的命令
我的命令
WORKDIR路径2
我的命令
我的命令
WORKDIR路径1
我的命令
我的命令
...

WORKDIR PATH1#还原以前的路径如果您试图从基本映像中保留WORKDIR,则不可能

WORKDIR只有在同一dockerfile中设置时才有值

如果您试图为不同的命令设置不同的工作目录:

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?
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?
来自centos:7
一些原始命令
一些原始命令
...
ARG路径1=/PATH1
ARG路径2=/path1
我的命令
我的命令
WORKDIR路径1
我的命令
我的命令
WORKDIR路径2
我的命令
我的命令
WORKDIR路径1
我的命令
我的命令
...

WORKDIR PATH1#还原之前的路径添加到WSMathias9的答案中:

除非您使用的基本映像更改了
WORKDIR
,否则默认值始终为
/
。在您的情况下,您可以在完成时将其设置为
/
,因为这是
centos
映像的默认值

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

例如:

FROM centos:7

WORKDIR /folder
RUN mycommand
做:


在WSMathias9的回答中添加:

除非您使用的基本映像更改了
WORKDIR
,否则默认值始终为
/
。在您的情况下,您可以在完成时将其设置为
/
,因为这是
centos
映像的默认值

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

例如:

FROM centos:7

WORKDIR /folder
RUN mycommand
做:


可以创建环境变量

ENV WORKDIR=/my/path/
WORDIR $WORKDIR

可以创建环境变量

ENV WORKDIR=/my/path/
WORDIR $WORKDIR

还请注意,每个
RUN
命令都在其自己的shell/容器中运行,因此您可以
runcd…&&
在备用目录中运行单个(命令类型)步骤,而不影响全局
WORKDIR
。可能的重复还请注意,每个
run
命令都在其自己的shell/容器中运行,因此您可以
运行cd…&&&
在备用目录中运行单个(命令类型)步骤,而不影响全局
WORKDIR