我正在尝试创建一个仅包含许多配置文件的映像。我以为我会从头开始创建映像,然后将所有文件复制到目录中。启动容器时,我将使用mount来挂载一个卷,然后所有不同的容器都可以使用该卷来获取配置。
这是我的Dockerfile
QuiztimeActivty
这是docker run命令
FROM scratch
ADD configurations /configurations
当我尝试开始图像时,我得到了 来自守护程序的错误响应:oci运行时错误:container_linux.go:247:启动容器进程导致“ exec:””:在$ PATH中找不到可执行文件。”
是否有可能没有任何入口点命令的容器?
答案 0 :(得分:0)
简单地输入,不。
一个容器需要一个ENTRYPOINT
或CMD
。它需要某事进行操作,否则它将退出。
对于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
不过,我同意上面的评论。您最好挂载包含配置文件的卷。以这种方式执行此操作有点不合时宜,而且相当难看。
答案 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
但是如前所述,您应该只创建一个包含数据的本地卷 并将该卷安装在需要访问文件的每个容器中。