Docker 如何将文件复制到外部工作目录

Docker 如何将文件复制到外部工作目录,docker,dockerfile,Docker,Dockerfile,我想将文件复制到工作目录之外的文件夹位置。我在docker文件中使用了以下行,但是当我查看容器时,这些文件不在那里 WORKDIR /app RUN cd ../opt/venv/lib/python3.7/site-packages/xxx/ COPY ./resources/abc.py . 当查看/opt/venv/lib/python3.7/site packages/xxx/位置时,abc.py不存在 我的方法有什么问题?感谢您的投入。您无法从外部获取文件。因此,如果您试图将/op

我想将文件复制到工作目录之外的文件夹位置。我在docker文件中使用了以下行,但是当我查看容器时,这些文件不在那里

WORKDIR /app

RUN cd ../opt/venv/lib/python3.7/site-packages/xxx/
COPY ./resources/abc.py .
当查看
/opt/venv/lib/python3.7/site packages/xxx/
位置时,
abc.py
不存在

我的方法有什么问题?感谢您的投入。

您无法从外部获取文件。因此,如果您试图
/opt/venv/lib/python3.7/site packages/xxx/resources/abc.py
复制到docker映像中,而该映像不在您的构建上下文中,则会失败。句号

下面是一些带注释的代码

# change to the /app directory in the container
WORKDIR /app

# run the command cd in the container.  cd is a shell builtin, and after
# this command finishes you will still be inside the /app directory in
# your container.
RUN cd ../opt/venv/lib/python3.7/site-packages/xxx/

# Attempt to copy ./resources/abc.py from your host's build context
# (NOT /opt/venv/lib/python3.7/site-packages/xxx/) into the container.
COPY ./resources/abc.py .
基本的解决方法是首先将
abc.py
复制到构建目录中。然后,您可以在构建过程中将其复制到docker容器中,如下所示:

WORKDIR /app
COPY abc.py .
# /app/abc.py now exists in your container
cd上的注释
cd
是一种更改shell工作目录的命令。当您在脚本(或者在本例中是docker
RUN
)中执行它时,它只会更改该进程的工作目录,该目录在脚本结束时结束。之后,您的工作目录将是您开始使用的目录。所以你不能用你想用的方式使用它

以这个
Dockerfile
为例:

FROM alpine:latest
  
RUN cd /opt      # cd to /opt
RUN pwd          # check current directory, you're STILL in '/'

RUN cd /opt && \
    pwd          # works as expected because you're still in the same process that cd ran in.
                 # But once you exit this RUN command you will be back in '/'
                 # Use WORKDIR to set the working directory in a dockerfile
以下是
Dockerfile
的建筑输出(删除了嘈杂的docker输出):


据我所知,您试图将文件复制到Docker映像中的特定位置(
/opt/venv/lib/python3.7/site packages/xxx/
),该位置位于您在Docker映像文件中定义的
WORKDIR
之外

通过在
COPY
命令中指定绝对目标路径,可以轻松完成此操作:

WORKDIR /app

COPY ./resources/abc.py /opt/venv/lib/python3.7/site-packages/xxx/abc.py
WORKDIR /app

COPY ./resources/abc.py /opt/venv/lib/python3.7/site-packages/xxx/abc.py