从标签名称获取容器ID

时间:2020-06-04 08:43:17

标签: docker

我正在尝试使用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不匹配。我想念什么?

2 个答案:

答案 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脆弱。