如何在 Docker 容器内复制和提取 .tar 文件

Raj*_*esh 11 docker docker-container

我遇到一个场景,其中我需要将 .tar 文件复制到 docker 容器中,并将内容提取到容器内的特定文件夹中。那么我们有什么特定的命令来处理这种情况吗?

ser*_*ndr 8

只需在 Dockerfile 中使用 ADD 指令即可。这是示例:

FROM ubuntu:18.04

ADD ./file.tar /root/

CMD "/bin/bash"
Run Code Online (Sandbox Code Playgroud)

进而:

docker run -it --rm ubuntu:test
root@a6ce756694a1:/# ls /root/
test.file
root@a6ce756694a1:/#
Run Code Online (Sandbox Code Playgroud)


F. *_*ely 5

假设您的 tar 文件相对于上下文目录build/distributions/my-app.tar,以下命令会将 tar 文件复制到 WORKDIR,解压它,然后将其删除。

WORKDIR /usr/share
COPY --chown=daemon:daemon build/distributions/my-app.tar .
RUN tar -xf my-app.tar && rm my-app.tar
Run Code Online (Sandbox Code Playgroud)


Szy*_*zke 2

有几个选项,具体取决于您的具体用例:

1. Dockerfile 中的 COPY 指令

请参阅文档,此命令允许您将文件从主机复制到图像指定的路径中。因此,每次新容器启动时,它都会在那里(显然,因为它是图像的一部分)。

2.挂载卷

如果您想将 .tar 文件传递​​到特定容器中,您可以使用以下命令挂载来自主机的卷(或显式使用CLI创建一个卷) :docker volume create--mount-v

$ docker run \
  --name mycontainer \
  --mount source=/path/to/folder/containing/tar/file,target=/target \
  myimage
Run Code Online (Sandbox Code Playgroud)

此操作之后/path/to/folder/containing/tar/file将可供 下的容器使用/target,因此您可以通过路径使用该文件/target/myfile.tar

我建议使用此选项,因为这是更可调的方法。