Dockerfile COPY在映像中创建不需要的子目录

时间:2018-11-05 12:41:12

标签: docker

我想创建一个Docker容器,然后写了图像。除了让我感到困惑的COPY命令外,其他所有东西都运行良好。我的Dockerfile:

RUN HOME=/home/ros rosdep update

RUN mkdir -p /home/ros/workspace

# Copy the files
COPY $PWD/src/a_file /home/ros/workspace/src
COPY $PWD/src/b_file /home/ros/workspace/src

a_file是一个类似于b_file的目录。当我尝试将这些目录复制到名为/home/ros/workspace/src的新创建目录中时,我希望a_fileb_file都位于/home/ros/workspace/src中。取而代之的是,我得到另一个src目录/home/ros/workspace/src/src),并且a_fileb_file的内容都在该目录内。

我在做什么错了?

2 个答案:

答案 0 :(得分:1)


如其他答案所述,$PWD是指图像上下文。
尝试改用.

要设置工作目录,请使用WORKDIR

此外,a_fileb_file都在src/

总而言之,这应该可以工作(未经测试):

FROM <your-base-image>
WORKDIR /home/ros

RUN rosdep update
RUN mkdir -p workspace

# Copy the files
COPY ./src workspace/src

答案 1 :(得分:0)

在Dockerfile中, PWD 变量指的是映像上下文(即,映像内部)。

来自COPY documentation

  

文件和目录的路径将被解释为相对于构建上下文的源。

如果src目录位于build context的根目录中,则您的示例为:

...
COPY src/a_file /home/ros/workspace/src
COPY src/b_file /home/ros/workspace/src
...