我正在按照building a parent image上Docker网站上的说明进行操作。我是Docker的新手。我使用的是CentOS 7.5。
我运行了CentOS的Docker网站上建议的mkimage-yum.sh脚本。我不明白为什么脚本的最后一行rm -rf "$target"
在那里,因为它似乎删除了脚本完成的所有工作。因此我将其注释掉,并留下一个目录/tmp/mkimage-yum.sh.ahE8xx
,该目录看起来像是具有典型linux文件结构(例如/usr/
,/etc/
)的最小linux映像
在我的主目录中,我编译了程序
main.c
:
#include <stdio.h>
#include <stdlib.h>
int main(void){
printf("Hello Docker World!\n");
return 0;
}
使用gcc -static -static-libgcc -static-libstdc++ -o hello main.c
,按照Docker网页中的规定将代码编译为静态链接的可执行文件。
Dockerfile
例如
FROM scratch
ADD hello /
CMD ["/hello"]
dockerd
服务器,然后在另一个终端中运行docker build --tag hello .
输出为:
Sending build context to Docker daemon 864.8 kB
Step 1/3 : FROM scratch
--->
Step 2/3 : ADD hello /
---> Using cache
---> a38d49d40e50
Step 3/3 : CMD /hello
---> Using cache
---> 3bcbb04c367f
Successfully built 3bcbb04c367f
天哪,看起来很有效!但是,我仍然仅在执行此操作的目录中看到Dockerfile hello main.c
。 Docker显然认为它做了什么,但是呢?它没有创建任何新文件。
docker run --rm hello
,它输出Hello Docker World!
。 但是,我从dockerd
服务器上收到了令人不安的错误消息:
ERRO[502548] containerd: deleting container error=exit status 1: "container f336b3a5505879453b4f7a00c06acf274d0a5f8b3d260762273a2d7c0a846141 does not exist\none or more of the container deletions failed\n"
WARN[502548] f336b3a5505879453b4f7a00c06acf274d0a5f8b3d260762273a2d7c0a846141 cleanup: failed to unmount secrets: invalid argument
问题:
docker build --tag hello .
到底做了什么?我没有看到任何输出。
dockerd
错误到底是什么?也许正在寻找不是由docker build
创建的docker镜像?
mkimage-yum.sh
如何适应这一需求?为什么会删除最后的所有工作。
答案 0 :(得分:0)
使用--rm
运行docker run
时,容器将运行,然后删除自身。如果要保留容器,请从命令中删除--rm
。
在您需要的情况下,命令docker build
将抓取dockerfile并创建一个本地映像,映像名称为hello
。
答案 1 :(得分:0)
您将不会在文件夹中看到任何其他文件。要查看创建的图像,请运行命令docker images
。在这里,您应该可以看到使用标签hello
构建的图像。
运行docker run <imagename>
时,它将启动包含所提供图像的容器。这就是为什么您看到C程序的输出