我有一个简单的 Dockerfile,它创建了一个 zip 文件,我正在尝试在它准备好后检索 zip 文件。我的 Dockerfile 看起来像这样:
FROM ubuntu
RUN apt-get update && apt-get install -y build-essentials gcc
ENTRYPOINT ["zip","-r","-9"]
CMD ["/lib64.zip", "/lib64"]
Run Code Online (Sandbox Code Playgroud)
阅读完文档后,我觉得这样的事情应该可以做到,但我无法让它发挥作用。
docker build -t ubuntu-libs .
docker run -d --name ubuntu-libs --mount source=$(pwd)/,target=/lib64.zip ubuntu-libs
Run Code Online (Sandbox Code Playgroud)
另一个问题:是否可以从命令行重命名 zip 文件?
这与评论中提到的重复问题不同,因为当他们使用cp从正在运行的 Docker 容器复制文件时,我试图在实例化时挂载一个目录。
有多种方法可以做到这一点。
docker cp <container_hash>:/path/to/zip/file.zip /path/on/host/new_name.zip
Run Code Online (Sandbox Code Playgroud)
正如您在问题中提出的那样,您还可以安装从容器到主机的路径。您可以通过指定挂载点在主机上的位置来执行此操作,也可以不指定挂载点的位置并让 docker 选择。这两条路径都需要不同的方法。
docker volume create random_volume_name
docker run -d --name ubuntu-libs -v random_volume_name:<path/to/mount/in/container> ubuntu-libs
Run Code Online (Sandbox Code Playgroud)
内容将位于您的主机上,在这里:
ls -l /var/lib/docker/volumes/random_volume_name/_data/
Run Code Online (Sandbox Code Playgroud)
docker run -d --name ubuntu-libs -v <existing/mount/point/on/host>:<path/to/mount/in/container> ubuntu-libs
Run Code Online (Sandbox Code Playgroud)
这将创建一个干净/空的位置,根据命令中定义的位置共享该位置。现在您需要修改 Dockerfile 以将工件复制到此路径,例如:
FROM ubuntu
RUN apt-get update && apt-get install -y build-essentials gcc
ENTRYPOINT ["zip","-r","-9"]
CMD ["sh", "-c", "/lib64.zip", "/lib64", "cp", "path/to/zip/file.zip", "<path/to/mount/in/container>"]
Run Code Online (Sandbox Code Playgroud)
内容现在将位于您的主机上,在此处:
ls -l <existing/mount/point/on/host>
Run Code Online (Sandbox Code Playgroud)
我必须从这里向 @joaofnfernandes 大喊大叫,他在解释方面做得很好。
| 归档时间: |
|
| 查看次数: |
2682 次 |
| 最近记录: |