Docker如何在Dockerfile中保存和恢复WORKDIR?
我有一个来自图像的Dockerfile。 我想修改它并添加一些文件操作,这些操作将与不同的WORKDIR相关,而不是由FROM图像给出的WORKDIR。因此,我希望在修改WORKDIR之前将WORKDIR保存到一个变量,并在命令结束后从该变量恢复WORKDIR。怎么做 通缉结果: Dockerfile伪代码: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 <
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
。