我正在尝试使用docker cp
从容器中复制文件。我使用docker build -t math-gsl-ubuntu-2004 .
构建了容器,并使用docker run
运行了容器映像之后,在容器中生成了文件/math--gsl/Math-GSL-0.41.tar.gz
。我可以复制文件
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b651512240f2 math-gsl-ubuntu-2004 "./entrypoint.sh 2.6" 3 hours ago Up 3 hours boring_lamport
ee008e7b8f01 44f63ff22dea "./entrypoint.sh" 3 hours ago Up 3 hours heuristic_liskov
然后我从上面的输出中注意到,该ID为b651512240f2
,我可以从主机发出docker cp b651512240f2:/math--gsl/Math-GSL-0.41.tar.gz .
来从容器中取出文件。
现在,我想通过名称math-gsl-ubuntu-2004
以编程方式确定容器ID:
$ docker inspect --format="{{.Id}}" math-gsl-ubuntu-2004
sha256:866d21bece6aaf63496a5b173cafa37a25e21d22f7d34c1bbae4c602526c419b
,但是与b651512240f2
的容器ID不匹配。我想念什么?
答案 0 :(得分:1)
创建图像的命令
docker build -t math-gsl-ubuntu-2004 .
它将创建一个名称为math-gsl-ubuntu-2004
的图像
构建图像后,您必须从中创建/启动一个容器,
做到这一点
docker run -it --name mycontainer math-gsl-ubuntu-2004 bash
然后
docker cp mycontainer:/math--gsl/Math-GSL-0.41.tar.gz .
获取容器名称
docker ps -a | grep <image:tag> | awk '{print $1}' | head -n 1
examples:
docker ps -a | grep ubuntu | awk '{print $1}' | head -n 1
docker ps -a | grep ubuntu:18.04 | awk '{print $1}' | head -n 1
答案 1 :(得分:1)
如果使用docker run -v
选项,则可以使您的进程将内容直接写到主机目录中:
docker run -v $PWD:/math--gsl ... math-gsl-ubuntu-2004
请注意,这将隐藏映像中该目录中的所有内容,并将其替换为主机目录内容,然后启动容器,然后将其写入主机目录中。如果您说的是工作流程-容器会生成tar文件-这将对您有用,并且比docker cp
脆弱。