从零开始创建新映像,没有任何入口点

时间:2018-07-19 18:07:53

标签: docker dockerfile

我正在尝试创建一个仅包含许多配置文件的映像。我以为我会从头开始创建映像,然后将所有文件复制到目录中。启动容器时,我将使用mount来挂载一个卷,然后所有不同的容器都可以使用该卷来获取配置。

这是我的Dockerfile

QuiztimeActivty

这是docker run命令

FROM scratch

ADD configurations /configurations

当我尝试开始图像时,我得到了 来自守护程序的错误响应:oci运行时错误:container_linux.go:247:启动容器进程导致“ exec:””:在$ PATH中找不到可执行文件。”

是否有可能没有任何入口点命令的容器?

3 个答案:

答案 0 :(得分:0)

简单地输入,不。

一个容器需要一个ENTRYPOINTCMD。它需要某事进行操作,否则它将退出。

对于scratch,没有任何可运行的内容,因此您需要将自己的二进制文件添加到容器中。有关此操作的有用指南,请参见:https://embano1.github.io/post/scratch/

否则,如果大小不是很关键,则最简单的方法是拍摄一个小的基本映像(例如alpine),然后在Dockerfile的末尾添加一个睡眠:

FROM alpine
ADD yourstuff
CMD ["/bin/sh", "-c", "while true; do sleep 60; done"]

请注意,由于alpine无法理解sleep infinity

,因此使用了while循环

不过,我同意上面的评论。您最好挂载包含配置文件的卷。以这种方式执行此操作有点不合时宜,而且相当难看。

答案 1 :(得分:0)

容器是流程的包装。当进程退出时,容器退出。而且,当您无法启动该过程时,就无法启动该容器。

如果要将某些文件装载到容器中,则只需要主机上的目录。创建一个命名卷,并用文件填充它。然后将该命名卷安装到您的容器中。这是一个衬里,用于从linux(或其他平台上的bash shell)的本地目录(data_dir)填充命名卷(此处称为vol_name):

tar -cC data_dir . | docker run -i --rm -v vol_name:/target busybox tar -xC /target

答案 2 :(得分:0)

您尝试做的事情称为data only container 您可以通过dockerfile在容器中挂载volume from

但是如前所述,您应该只创建一个包含数据的本地卷 并将该卷安装在需要访问文件的每个容器中。

https://docs.docker.com/storage/volumes/

相关问题