【问题标题】:Copy files from container to local in Docker在 Docker 中将文件从容器复制到本地
【发布时间】:2021-10-11 00:14:00
【问题描述】:

我想将文件从容器复制到本地。该文件是在执行python脚本后生成的,但由于当时ENTRYPOINT,容器运行后立即退出,无法使用docker cp命令。在设法复制文件之前如何从退出中prevent 容器有任何想法吗?下面是我的 Dockerfile:

FROM python:3.9-alpine3.12

WORKDIR /app

COPY . /app/

RUN pip install --no-cache-dir -r requirements.txt && \
    rm -f /var/cache/apk/*

ENTRYPOINT ["python3", "main.py"]

我使用这个命令来运行镜像: docker run -d -it --name test [image]

【问题讨论】:

  • 为什么不能使用docker cp?它适用于停止的容器(往返):stackoverflow.com/a/38356081/407651
  • @mzjn,当我使用这个命令时它显示Error: No such container:path: cont_name:/app/example.jsondocker run -d -it --name test [image] \ && docker cp cont_name:/app/example.json /local/path。不能同时使用&&
  • 您的容器名称是test,所以它应该是docker cp test:/app/example.json /local/path
  • Mikael,是的,我做到了,cont_name 只是让我定义容器名称。

标签: docker


【解决方案1】:

如果输出文件存储在它自己的目录中(比如/app/output),您可以运行:docker run -d -it -v $PWD/output:/app/output/ --name test [image],该文件将位于当前目录的output 目录中。

如果不是,则使用以下命令运行容器:docker run -d -it --name test [image]
然后使用docker cp test:/app/example.json .将该文件复制到您自己的文件系统中以将其复制到当前目录。

【讨论】:

  • Mikael,我试过了,但我在本地看不到输出文件。 :(
  • 输出应该在哪个目录下?
  • 在容器中,文件存储在/app目录下。 docker run -d -it -v $PWD:/app/example.json --name test [image]
  • 在这种情况下,我的解决方案不起作用。让我稍微改变一下答案
  • 嗨 Mikael,如果它单独执行,它可以工作,但是当我像这样组合命令时:docker run -d -it --name test [image] \ && docker cp test:/app/example.json .,它显示这个错误:Error: No such container:path: test:/app/example.json。原因是因为命令是在terraform中运行的,所以需要加上&&
【解决方案2】:

如果不需要在后台运行容器,则可以从标准输出复制文件

docker run -it [image] cat /app/example.json > out_example.json

【讨论】:

  • 这行不通,因为容器会退出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 2014-03-29
相关资源
最近更新 更多